C++继承构造顺序:基类先执行再派生类

需积分: 27 1 下载量 148 浏览量 更新于2024-07-14 收藏 1.3MB PPT 举报
在C++面向对象程序设计中,当创建一个派生类对象时,构造函数的执行顺序非常重要,因为它决定了新类如何初始化并利用基类的特性。以下是这个过程的详细步骤: 1. **基类构造函数调用**: - 在创建派生类对象时,首先会按照继承声明的顺序,从左到右依次调用基类的构造函数。这是确保父类成员被正确初始化的关键步骤,因为派生类可能依赖这些成员。 2. **派生类的初始化**: - 一旦基类的构造函数执行完毕,接下来会执行派生类自身的构造函数体。这包括了对派生类特有的成员变量进行初始化,以及执行类体内的任何初始化代码。这是对派生类特有行为设置的阶段。 - 例如,如果有一个`Person`类继承自`Date`类,那么在`Person`对象的构造过程中,首先会调用`Date`类的构造函数来初始化`dob`和`dod`这两个`Date`对象,然后继续执行`Person`类的剩余构造函数体,如设置`name`和`sex`等。 3. **合成与继承概念**: - C++中的继承分为两种主要类型:单继承和多继承。合成(composition)则是通过将已有的类实例化为新类的一部分,而不涉及继承关系。这里提到的继承是面向对象编程的核心概念,它允许子类(派生类)继承基类的属性和方法,同时还可以添加自己的特性和扩展。 4. **例子说明**: - 在提供的`main`函数中,创建了一个`Person`对象`author`,它继承自`Date`类。在初始化`author`时,先调用了`Date`的构造函数,设置了`dob`(出生日期),然后执行`Person`类的构造函数体,设置`name`、`sex`和`dod`(死亡日期)。 5. **友元函数的应用**: - `operator>>`和`operator<<`被定义为`Date`类的友元,使得可以方便地从输入流读取和输出日期对象。在派生类中,如果需要类似的友元操作,它们会被应用到派生类的对象上,比如`Person`的`dob`和`dod`。 总结来说,构建派生类对象时,C++会遵循严格的构造顺序:首先初始化基类,然后执行派生类自身的初始化。这种机制促进了代码的复用和模块化,同时保证了类层次结构中的正确性。理解并掌握这一规则对于编写高效的C++面向对象程序至关重要。