C++ 继承c++;构造函数-谁先打电话?

C++ 继承c++;构造函数-谁先打电话?,c++,inheritance,initialization,C++,Inheritance,Initialization,我有以下代码: class A{ A *prev, *next, *pLast; public: A(): prev(NULL), next(NULL) { pLast->next = this; pLast = this; } } class B: public A { int y; public: B(int y1) : y(y1) {cout << "in cotr" << en

我有以下代码:

class A{
  A *prev, *next, *pLast;
  public:
    A(): prev(NULL), next(NULL)
    {
        pLast->next = this;
        pLast = this;
    }
}
class B: public A
{
   int y;
   public:
   B(int y1) : y(y1) {cout << "in cotr" << endl;}
}
A类{
A*上一个,*下一个,*塑料;
公众:
A():上一个(NULL),下一个(NULL)
{
pLast->next=这个;
pLast=这个;
}
}
B类:公共A
{
int-y;
公众:

B(inty1):y(y1){cout在初始化派生类的成员之前,首先调用基类构造函数。

构造函数:base->most-derived

析构函数:大多数派生->基

的定义如下:

列表中成员初始值设定项的顺序无关紧要:实际 初始化顺序如下:

1) 如果构造函数用于派生最多的类,则为virtual base 类按照它们在中出现的顺序进行初始化 基类声明的深度优先从左到右遍历 (从左到右表示基本说明符列表中的外观)

2) 然后,按从左到右的顺序初始化直接基类,如下所示 它们出现在此类的基本说明符列表中

3) 然后,按照以下顺序初始化非静态数据成员: 类定义中的声明

4) 最后,执行构造函数的主体


因此,在这种情况下,初始化顺序将是:(1)基类
A
(2)成员
y
(3)构造函数体
B

,这里有一种方法可以找到,无需阅读无休止的标准(插入一些关于钓鱼和教学的内容)

您需要在成员初始化期间打印一些内容。
如果您的成员也是类的实例,则可以执行此操作:

struct Member
{
    Member(int i) { cout << "Member initialized" << endl; }
};

struct A
{
    A() { cout << "A initialized" << endl; }
};

struct B : A
{
    B() : member(0) { cout << "B initialized" << endl; }
    Member member;
};

int main()
{
    B b;
}
另一方面,这是一种可以使用“逗号运算符”的情况,它可以避免额外的类。
这样写
B

struct B : A
{
    B() : member((cout << "Member initialized\n", 0)) { cout << "B initialized" << endl; }
    int member;
};
结构B:A {
B():首先执行父类的成员((cout)构造函数。实际上,B的初始化列表有一个对A.
B(inty1)的(默认)构造函数的隐式调用:A(),y(y1){……}
,您可以(明确地)使用另一个构造器。为什么不试一下呢?你住的地方的
cout
s很贵吗?为什么不在构造器中使用两个,自己看看呢?@enhzflep一些
cout
s可以长到2米。可能是
struct B : A
{
    B() : member((cout << "Member initialized\n", 0)) { cout << "B initialized" << endl; }
    int member;
};