编译器如何在继承C++中进行组合
How the compiler do composition in inheritance C++?
编译器如何在继承中进行组合
假设我创建了一个派生类的对象,其中基类和派生类都包含其他类的via composition对象。我想要一些例子来解释构造函数和析构函数。
我不会让这件事对你来说过于简单,因为它看起来确实像家庭作业。如果你能仔细思考并理解下面的内容——祝你好运。。。。
基类的构造函数被调用,它将按照基类中声明的顺序为每个成员变量调用基类初始化列表中指定的参数对应的构造函数或默认构造函数(如果有的话)(否则,成员未初始化,尽管有时(例如,对象所在内存的早期零初始化)——可能是由于new (p) T()
表示法或static
——无论如何都会保证特定值)。然后,派生构造函数对其自己的数据成员执行相同的操作。破坏按相反的顺序发生。
如果您需要演示基本原理,可以使用的一些变体
struct M { // Marker
int id;
M(int i) : id(i) { cout << "tconstruction M" <<id<< endl; }
~M() { cout << "tdestruction M" <<id<< endl; }
};
struct B { //Base
M mb;
B() : mb(1) { cout << "construction B (body finished)" << endl; }
~B() { cout << "destruction B (body finished)" << endl; }
};
struct D : public B { //Derived
M md;
D() : md(2) { cout << "construction D (body finished)" << endl; }
~D() { cout << "destruction D (body finished)" << endl; }
};
当然,它是简化的,但它表明基础是在派生之前建造的,构件是在执行构造体之前建造的。它还表明,破坏是按照与建造相反的顺序进行的。
但这只是最明显的。您还应该展示一些示例,演示当存在severals时,成员的构造顺序,以及在多重继承中发生的情况,以及静态成员的情况。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 检查向量是否具有所有可能的字符组合
- 如何在加密++中将两个源组合成新的源
- 根中的组合
- 更改 C++ 中的组合分类变量
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 组合字符串不适用于 libCurl,C++
- 测试两个类型列表中的所有组合
- 将多个 for 循环组合成单个迭代器
- 如何从组合指数中找到仓位
- 防止组合框被关闭
- 如何解决可能的唯一组合问题