C++ 에서 부모 자식 클래스 OUTPUT 관련 질문입니다. output 의 흐름이 어떻게 되는 건지 설명해주시면 정말 감사하겠습니다.
조회수 477회
It is the Answer.
A()
B(int)
C(int)
~C()
~B()
~A()
근데 왜 이런 답이 나왔는지 흐름을 모르겠습니다.
class A {
public:
A() { cout << “A()\n”; }
~A() { cout << “~A()\n”; }
}
class B : public A
{
public:
B() { cout << “B()\n”; }
B(int i) { cout << “B(int)\n”; }
~B() { cout << “~B()\n”; }
}
class C : public B {
public:
C() { cout << “C()\n”; }
C(int i) : B(i) { cout << “C(int)\n”; }
~C() { cout << “~C()\n”; }
}
void main() {
C *b = new C(3);
delete b;
}
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
- C의 객체를 생성할 때 생성자
C(int i)
가 호출됩니다. - 해당 생성자는 명시적으로 부모의 생성자인
B(int i)
를 호출합니다. - 해당 생성자는 부모 생성자를 호출해야 하는데 명시적인 호출이 없으므로 기본생성자인
A()
를 호출합니다. 클래스 A는 부모가 없으므로 A()를 출력하고 B의 생성자로 돌아옵니다. - B의 생성자는 돌아와서 B(int)를 출력하고 C의 생성자로 돌아옵니다.
- 마지막으로 C의 생성자는 C()를 출력하고 끝납니다.
- C 객체의 소멸자를 호출할 때
~C()
가 호출되고 ~C가 출력됩니다. - 이후 부모인 B 객체의 소멸자를 호출해야 하므로
~B()
가 호출되고 ~B가 출력됩니다. - 마지막으로 B의 부모인 A 객체의 소멸자를 호출해야 하므로
~A()
가 호출되고 ~A가 출력되고 끝납니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- C의 객체를 생성할 때 생성자
댓글 입력