【专题总结】【一文解决】C++多继承下的构造函数执行顺序

多继承下的构造函数执行顺序
派生类构造函数执行顺序如下
①调用基类构造函数→调用顺序按它们被继承时【从左至右】被说明的次序
②调用子对象的构造函数→调用顺序按它们在【类中说明次序】
③调用派生类的构造函数
【典型题1】13浙工大卷二读程序4题
【分析】下面①classC:public A,public B时A左B右→故先调A构造再调B构造
②B b,A a是子对象(类中定义的对象),类中先说明b再说明a→故先调B构造再调A构造
③最后调派生类C构造
在这里插入图片描述
【题2】C++教辅p191例题
【注意】classC:public B,public A时B左A右→故先调B构造再调A构造 [本题没有子对象]
在这里插入图片描述
题1代码如下

#include "bits/stdc++.h" 
#include<iostream>
using namespace std;

class A{
	int a;
	public:
		A(){
			cout<<"调用A的构造"<<endl;
		}
}; 

class B{
	int b;
	public:
		B(){
			cout<<"调用B的构造"<<endl;
		} 
};

class C:public A,public B{ //从类A和B共有派生C【注意】A左B右,先调A构造调B构造 
						  //上面输出1"调用A构造",2"调用B构造" 
	B b; //子对象b.输出3调用B的构造 
	A a; //子对象a.输出4调用A的构造 
	int c;
	public:
		C(){ 
			cout<<"调用派生类C的构造"<<endl; //最后调用5派生类C构造 
		} 
};

int main(){ 
    C c; 
    
    return 0;
} 

题2代码如下

#include "bits/stdc++.h" 
#include<iostream>
using namespace std;

class A{ //基类A 
	int a;
	public:
		A(int i){
			a=i;
			cout<<"A构造"<<endl;
		}
		void disp(){
			cout<<"A的a="<<a<<endl;
		}
}; 

class B{ //基类B  
	int b;
	public:
		B(int j){
			b=j;
			cout<<"B构造"<<endl; 
		}
		void disp(){
			cout<<"B的b="<<b<<endl;
		}
};

class C:public B,public A{ //从类A和B共有派生C【注意】B在左A在右,先调B构造再调A构造    
	int c;
	public:
		C(int k):A(k-2),B(k+2){ //包含基类成员初始化参数列表  
			c=k;
			cout<<"C构造"<<endl;
		}
		void disp(){ //C的disp()  
			A::disp(); //4输出A的a=8 
			B::disp(); //5输出B的b=12 
			cout<<"C的c="<<c<<endl; //6输出C的c=10 
		}
};

int main(){ 
    C obj(10); //输出1B构造,2A构造,3C构造 
    obj.disp(); //执行C的disp() 
    
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值