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 답변

    1. C의 객체를 생성할 때 생성자 C(int i)가 호출됩니다.
    2. 해당 생성자는 명시적으로 부모의 생성자인 B(int i)를 호출합니다.
    3. 해당 생성자는 부모 생성자를 호출해야 하는데 명시적인 호출이 없으므로 기본생성자인 A()를 호출합니다. 클래스 A는 부모가 없으므로 A()를 출력하고 B의 생성자로 돌아옵니다.
    4. B의 생성자는 돌아와서 B(int)를 출력하고 C의 생성자로 돌아옵니다.
    5. 마지막으로 C의 생성자는 C()를 출력하고 끝납니다.
    6. C 객체의 소멸자를 호출할 때 ~C()가 호출되고 ~C가 출력됩니다.
    7. 이후 부모인 B 객체의 소멸자를 호출해야 하므로 ~B()가 호출되고 ~B가 출력됩니다.
    8. 마지막으로 B의 부모인 A 객체의 소멸자를 호출해야 하므로 ~A()가 호출되고 ~A가 출력되고 끝납니다.
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)