派生类在构造对象时,先构造基类对象,再构造派生类自身的成员

#include <iostream>

using namespace std;

struct A

{

  A(){cout << "A:"<< endl;}

};

struct B : public A

{

  B(){cout << "B:" << endl;

};

struct C : public B

{

  C(){cout << "C:" << endl;

  B b;

  A a;

};

int main()

{

  C c;

  return 0;

}

开始猜测运行结果为:A-B-A-A-B-C;因为要先将C类中的各元素的对象都构造完成后,再去构造类C;

正确答案:A-B-A-B-A-C;

正解:由于b,a都是class C的成员,故应该在最后构造自身的成员,先构造C的基类B,在构造B前,先构造B的基类A,即先输出A-B,构造完后,再构建成员b,输出A-B,然后再构建a,输出A,最后对象c构建成功输出C,即A-B-A-B-A-C

原文地址:https://www.cnblogs.com/wickedboy237/p/3017581.html