C++ 我不知道此代码中的输出过程(父类子级)
C++ I don`t know process of output in this code(parent class-child)
这是答案。
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++书籍或教程都应该涵盖如何在父/子层次结构中相互调用构造函数和析构函数。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 在运行时选择父类的实现
- 如何在C++子类中访问父类的私有变量
- 将父类的子类的数据复制到具有相同父类的另一个类
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- C++ 将子类的对象添加到父类的向量中
- 两个父类的构造函数的序列
- 为什么我的子类不继承父类的字符串?
- C++调用使用重写函数的父类函数
- 在父类中公开受保护的构造函数
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 如何使父类不重复已经执行的祖父方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- Arduino在子类中使用父类方法
- 使用 Clang LibTooling 扫描C++在模板化父类中调用本地类的源
- 从父类的向量访问子类函数,而无需向下转换
- C++ 我不知道此代码中的输出过程(父类子级)