作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
关于创建对象的一个小问题。假设我有这两个类:
struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};
struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}
A a;
};
在main中我创建了一个B
的实例:
int main(){
B b;
}
请注意,B
派生自 A
,并且还有一个 A
类型的字段。
我正在尝试找出规则。我知道在构造对象时首先调用它的父构造函数,反之亦然。
字段(在这种情况下为 A a;
)呢?当B
被创建时,什么时候会调用A
的构造函数?我还没有定义初始化列表,是否有某种默认列表?如果没有默认列表?还有关于破坏的同样问题。
最佳答案
class
开始。如果有多个基础 class
,则从最左边的基础开始构建。 (旁注:如果存在 virtual
继承,则优先级更高。class
本身就被构造好了不管初始化列表如何,调用顺序都是这样的:
class A
的构造函数class B
的字段a
(类型为class A
)class B
的构造函数关于c++ - 继承中调用构造函数/析构函数的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7539282/
我是一名优秀的程序员,十分优秀!