继承中参数传递及调用顺序

本文详细介绍了C++继承中构造函数的参数传递和调用顺序。在单一及复杂继承情况下,如何定义和调用基类与派生类构造函数,以及派生类构造函数如何初始化基类和新增成员。测试结果显示,未实现的构造函数会导致编译错误。总结了派生类构造函数的调用顺序:首先是基类构造函数,然后是内嵌对象构造函数,最后是派生类自身的构造函数。析构函数的调用顺序则相反。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承中参数传递及调用顺序

一、简单派生类的构造函数传参

C++语言的继承特性,指子类可以继承父类的属性和行为,并可以重新定义或添加新的属性和行为。父类中为private型的属性和行为虽然被继承,但是子类中仍不能访问。在继承机制下,构造函数是不能被继承的,所以基类构造函数的参数要由子类构造函数传!

单一继承的子类构造函数的声明(.h中)形式为:

派生类构造函数名(参数总表) ();

单一继承的子类构造函数的定义(.cpp中)形式为:

派生类名::派生类构造函数名(参数总表) : 基类构造函数名 (参数名表)

{

派生类新增成员的初始化语句;

};  

定义派生类的构造函数时,在构造函数的参数总表中包括基类构造函数所需的参数和派生类新增的数据成员初始化所需的参数。冒号后面基类构造函数名 (参数名表),表示要调用基类的构造函数。

#include "stdafx.h"

#include <iostream>    
#include <string>    
using namespace std;    

class parent
{
public:
	parent(int a,int b)  //基类构造函数,需要传入两个参数
	{ 
		//基类的初始化
		this->a = a;
		this->b = b;
	}
public:	
	int a,b;
};

class child:public parent
{
public:
	child(int a,
### C++ 中多继承情况下的构造函数调用顺序C++ 的多继承机制中,当一个派生类从多个基类继承时,构造函数的调用遵循特定的规则。这些规则确保所有基类成员都能被正确初始化。 #### 基本原则 构造过程按照以下顺序执行: 1. **虚基类的构造函数**:如果存在虚基类,则优先调用虚基类的构造函数。 2. **非虚基类的构造函数**:接着按声明顺序依次调用各个非虚基类的构造函数。 3. **派生类自身的构造函数**:最后才调用派生类本身的构造函数来完成剩余部分的对象初始化[^1]。 对于具体的例子可以考虑下面这段代码展示的情况: ```cpp #include <iostream> using namespace std; class Base1 { public: Base1() { cout << "Base1 constructor called." << endl; } }; class Base2 { public: Base2(int i) { cout << "Base2 constructor with int parameter called: " << i << endl; } }; class Derived : public Base1, public Base2 { private: int m; public: // 初始化列表用于传递参数给基类构造器并初始化成员变量 Derived(int e): Base2(7), m(e){ cout << "Derived class's own initialization part completed: consD" << endl; } }; ``` 在这个案例里,`Derived` 类同时继承自 `Base1` 和带参版本的 `Base2` 。创建 `Derived` 对象实例化过程中会先触发 `Base1()` 默认无参构造函数再是 `Base2(int)` 参数化的构造函数最终才是 `Derived::Derived(int)` 完成整个对象构建[^2]。 #### 输出结果分析 假设我们定义了一个 `Derived d(8);` 实例,在控制台打印的信息将会是这样的序列: - 首先是 `Base1` 的默认构造函数消息; - 接着由于显式指定了 `Base2` 构造函数所需的整数参数因此输出对应的消息; - 最终显示来自 `Derived` 自身构造逻辑里的提示语句[^3]。 这种构造次序保障了即使是在复杂的多重继承结构下也能维持良好的封装性和数据一致性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值