【C++】派生类与继承第二小节----派生类的构造函数与析构函数,调整基类成员在派生类中的访问属性

给自己积极的心理暗示,其实想开一点,都没什么大不了的,只要思想不滑坡,办法总比困难多。累了就歇一歇,别沉迷太久呦~


前言

1.派生类不能继承基类的构造函数和析构函数,要想对派生类的所有成员,进行初始化工作时,新增成员使用派生类的构造函数,从基类继承来的数据成员需要使用基类的构造函数。所以,如何在派生类中使用基类的构造函数呢?
2.派生类私有继承基类时,基类的公有成员被调整为私有成员,调用基类成员函数时很不便利,所以,能不能对继承来的成员进行二次修改呢?
3.一个派生类如何同时继承多个基类?如果两个基类有同名的成员,如何区分调用的是哪个成员呢?
以上就是我们本小节要解决的问题。


提示:以下是本篇文章正文内容,下面案例可供参考

1.派生类的构造函数与析构函数

正常请况下,在创建派生类对象时,首先调用的是基类的构造函数,随后,再执行派生类的构造函数。析构函数的调用顺序与构造函数相反,先执行派生类的析构函数,再执行基类的。

1.1 派生类的构造函数格式

派生类的构造函数格式为:
ciass 派生类名 : 继承方式 基类名
{
派生类名(总的参数表): 基类名(基类的参数表) //构造函数
{派生类新增成员初始化}
}
如下示例,B0为基类,n,s,a为继承来的基类成员,num为新增成员

Stu(string n, string s, int a,string nu):B0(n,s,a)
	{
		num = nu;
	}

注意:
1)仔细观察,构造函数中,B0的参数列表只有参数名,没有参数类型,因为这里是调用构造函数,调用函数时,括号内的为实参
2)派生类若在类中声明构造函数,在类外定义,则声明时不写“ :基类名(基类参数表)”。例如上面的例子,声明只写–Stu(string n, string s, int a,string nu);后面的不写。
3)当基类构造函数有参数时,派生类必须定义构造函数,甚至构造函数体为空,仅仅起到参数传递的作用。

1.2 派生类的析构函数

在执行派生类的析构函数时,系统会自动调用基类的析构函数。

析构函数调用的顺序与构造函数相反,先执行派生类,再执行基类。

1.3 含有子对象的派生类构造函数

当派生类含有内嵌的对象成员时,构造函数的格式为

Stu(string n, string s, int a,string nu,string cl,string ma,float gra):B0(n,s,a),b1(n,s,a)
	{
		num = nu; cla = cl; major = ma; grade = gra;
	}

如上实例,b1为B0类型的对象成员==,格式就是在构造函数后面用逗号隔开,列出对象成员名字和对象成员的参数表

2.调整基类成员在派生类的访问属性

2.1 同名成员

若出现派生类中继承两个基类,两个基类中出现同名成员,可通过类名::成员名确定访问的是哪个类的成员。

virtual void show()
	{
		B0::show0();    //确定show0调用的是B0的函数
		cout << " 工号:" << num << " 职称:" << title << " 工资:" << wage << endl;
	}

2.2 改变继承成员的访问属性

当派生类私有继承基类时,基类的所有成员都不能通过对象直接访问,那么如何改变某个成员的访问属性呢?

class B1: private B0
{
public:
	B0::show0();//show0位B0公有成员
protected:
	B0::ave;   //ave为B0保护成员
}

如上,可通过基类名::成员 的方式改变基类在派生类的访问属性。
注意:只能将基类的公有成员转为派生类的公有成员,将基类的保护成员转为派生类的保护成员,基类的私有成员依旧不可访问


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值