C++ 构造函数调用c++;(继承类)

C++ 构造函数调用c++;(继承类),c++,constructor,C++,Constructor,C是从A和B派生的-所以在C的构造函数可以执行之前,A和B的构造函数都必须完成。如果不是这样,那么C构造函数就不能依赖其基类提供的任何东西 例如,假设A包含一个项目列表,该列表是从其构造函数中的数据库创建和归档的。一个实例的所有实例都可以依赖于列表的完成,因为构造函数必须在实例可供其余代码使用之前完成。但是C也是一个A——它的起源与“福特”也是“汽车”一样——所以它很可能想要访问该列表。构造实例时,在派生类之前会自动调用基类构造函数,以确保在派生构造函数启动时一切就绪 例如,稍微更改代码: B'

C是从A和B派生的-所以在C的构造函数可以执行之前,A和B的构造函数都必须完成。如果不是这样,那么C构造函数就不能依赖其基类提供的任何东西

例如,假设A包含一个项目列表,该列表是从其构造函数中的数据库创建和归档的。一个实例的所有实例都可以依赖于列表的完成,因为构造函数必须在实例可供其余代码使用之前完成。但是C也是一个A——它的起源与“福特”也是“汽车”一样——所以它很可能想要访问该列表。构造实例时,在派生类之前会自动调用基类构造函数,以确保在派生构造函数启动时一切就绪

例如,稍微更改代码:

B's constructor called A's constructor called C's constructor called
A类
{
公众:

A(){coutkanishk tanwar的回答有更多的细节,但我还是在写这篇文章,所以这里有一个非常简短的介绍,说明为什么会发生这样的事情来回答你的问题:

为了确保类的实例已正确初始化,始终会调用基类型的构造函数。如果未指定要调用的构造函数(语法:
C():B(),a()
,用于
C
的构造函数),使用默认构造函数。由于派生类构建在基类上,因此必须首先构建基类


在您的情况下,您已经为默认构造函数指定了内容,因此当您实例化
C

时运行的代码为什么不呢?A
C
包含分别为A
B
和A
A
的部分,这些部分也需要构造。构造函数是根据您声明了<代码> C <代码>继承自<代码> b>代码>和<代码> < <代码> > C:public b,public a < /c> C++中,在进入构造函数之前,为您调用所有超类和成员变量的无参数构造函数。<代码> A{Pult:ValueFoE(){}}
可以写成
struct A{void foo()}
以使示例更简单/更小。我建议您阅读一本好的。这将节省您大量的时间。可能会重复 B's constructor called A's constructor called C's constructor called
class A
{
public:
A() { cout << "A's constructor called" << endl; }
};

class B: public A
{
public:
B() { cout << "B's constructor called" << endl; }
};

class C: public B
{
public:
C() { cout << "C's constructor called" << endl; }
};

int main()
{
C c;
return 0;
}
A's constructor called B's constructor called C's constructor called