2013-01-24 3 views
2

나는 다음과 같은 코드를 가지고 있는데 왜 객체 B를 만들 때 클래스 A의 생성자가 호출되지 않는다는 것을 이해하지 못한다. 나는 약간의 help.hank를 매우 감사 할 것이다.C++ 클래스 구성, 왜 생성자가 호출되지 않습니까?

#include <iostream> 
using namespace std; 

class MyClass 
{ 
    int x; 
public: 
    MyClass(int y);       
    MyClass(MyClass &my) 
    { 
     x = my.x; 
     cout << "My class created by copy" << endl; 
    } 
}; 
MyClass::MyClass(int y) 
{ 
    x = y; 
    cout << "My class created" << endl; 
} 

class A { 
    MyClass k; 
    public: 
     A(MyClass &my) : k(my) { 
      cout << "A created" << endl; 
     } 
}; 
class B { 
    A data; 
    public: 
     B(A& aa) : data(aa) 
     { 
      cout << "B created" << endl; 
     } 
}; 
int main() 
{ 
    MyClass obj(100); 
    A a(obj); 
    B b(a);      
    return 0; 
} 

실행 :

My class created 
My class created by copy 
A created 
My Class created by copy 
B created 
+1

'**'코드보기에서 물건을 잘라내는 것은 마크 업과 함께 작동하지 않습니다. 편집하십시오! –

+2

왜 downvotes 얘들 아? 새로운 사용자. SE에 오신 것을 환영합니다. –

+2

왜 downvote ?? ** 나는 정말로 ** [tag : C++]의 공격적인 downvoting을 주석없이 남겨 두지 않고 (적어도 여기에서 나는 그렇게 눈치 챘다). 여분의 태그 몇 개를주는 것은 이러한 행동을 완화시키는 것으로 보이며 이는 처음 또는 낮은 평판 OP에 적용될 가능성이 높습니다. 그들에게 기회를주십시오! 도움이 되십시오! –

답변

6

A 's이 (가) 생성자를 복사하면 정의되지 생성자 호출됩니다. 당신이 그것을 정의하거나 삭제하지 않았기 때문에, 기본 생성자가 호출됩니다. 기본 생성자는 각 멤버 변수의 복사본 생성자를 호출합니다. 나는 그것이 선언의 순서에 있다고 믿는다.

관련 문제