派生类在构造对象时,先构造基类对象,再构造派生类自身的成员
2013-04-13 00:19
183 查看
#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
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
相关文章推荐
- C++中基类,派生类 类成员对象的构造函数,析构函数的顺序
- 派生类环境中基类对象不能访问自己的保护成员
- 派生类对基类成员的访问权限和派生类对象对基类成员的访问权限
- 派生类与派生类对象对基类成员的访问
- 派生类对象成员函数与基类成员函数的重载
- 区分“派生类对象”和“派生类”对基类成员的访问权限
- 基类、派生类、派生类成员变量的构造和析构顺序
- 从“派生类不能访问基类对象的protected成员”开始讨论各类成员的“可见性”
- C++基类成员函数访问派生类对象的基类成员问题
- 【提问整理】protected继承,派生类对象如何访问基类成员?
- 派生类的对象只能访问基类的public成员
- C++派生类对象访问基类的protected成员
- C++派生类对象访问基类的protected成员
- 关于派生类拷贝构造函数中使用基类私有类对象成员的问题
- 基类、派生类、派生类成员变量的构造和析构顺序
- 用基类指针创建的派生类对象,无法访问派生类对象的数据和成员
- 基类派生类构造析构函数调用顺序、成员初始化和销毁顺序
- C++派生类对象访问基类的protected成员
- 派生类访问基类的私有成员
- 7.26派生类成员函数与基类成员函数同名