C++ 我不知道此代码中的输出过程(父类子级)

C++ I don`t know process of output in this code(parent class-child)

本文关键字:父类 过程 输出 我不知道 代码 C++      更新时间:2023-10-16

这是答案。

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;
}

C(int)在其成员初始化列表中显式调用B(int),然后再将自身记录在其正文中。

B(int)隐式调用A(),然后将自己记录在其体内。

基类是在派生类之前构造的。 这就是为什么您会看到构造函数记录为A(),然后是B(int),然后是C(int)

~C()在记录自身后在最后隐调用~B()

~B()在记录自身后在最后隐调用~A()

基类在派生类之后被销毁。 这就是为什么您会看到析构函数记录为~C(),然后是~B(),然后是~A()

任何体面C++书籍或教程都应该涵盖如何在父/子层次结构中相互调用构造函数和析构函数。