016--继承--多级继承与多级多重继承

简介:继承分为单继承与多继承。多继承又分为多级继承与多重继承,同时又演化出了 多级多重继承。因此在多级多重继承上,衍生出了虚基类的问题。(假设现在有五个类,分别为A,B,C,D,E)

  • 多级继承:A是基类,B继承A,C继承B,D继承C,E继承D.这种继承方式就是多级继承。
  • 多重继承:A是基类,B继承A,C继承A,D继承B,C,E继承D.这种继承方式既可以是多重继承,也可以是多级多重继承。

在继承关系中,如果类中有同名成员(temp),如何去访问?

通过对象自己访问的是这个对象自己的成员。

如果去访问基类的同名成员,可以通过类名限定::去访问。========》以下代码针对派生类对象如何去访问基类中的同名成员。由此引发的一个问题?从而引出虚基类的概念。


代码学习:(代码中有注释,多去理解)

//多级多重继承引出虚基类的问题?什么是虚基类,虚基类能做什么。
//多级多重继承:
//会导致在派生类中可能会有多个相同的基类,因此会影响派生类的大小。所以这个就是一个问题,为了解决这个问题,虚基类就出现了。也就是在相关类前加关键字virtual.
//有两种用法:一些特殊的情况,必须有多个相同的基类(一般这种情况比较少)
//通常情况下,不需要多个相同的基类(因此引出虚基类的概念)
//----------------------------------------------
//
#include<iostream>
using namespace std;
class CA{
public:
	int temp;
public:
	CA(){
		
	}
	~CA(){}
};
class CB:public CA{
public:
	int temp;
public:
	CB(){

	}
	~CB(){}
};
class CC :public CA{
public:
	int temp;
public:
	CC(){

	}
	~CC(){}
};
class CD :public CB, public CC{
public:
	int temp;
public:
	CD(){

	}
	~CD(){}
};
class CE :public CD{
public:
	int temp;
public:
	CE(){

	}
	~CE(){}
};
int main(){
//为了方便看到效果,把类中成员temp的访问属性统一为public.
	//在继承关系中,如果类中有同名成员(temp), 如何去访问?
		//通过对象自己访问的是这个对象自己的成员。
	//	如果去访问基类的同名成员,可以通过类名限定:去访问。
	
	CE e;//以最终派生类E去访问不同类中的同名成员temp;
	e.temp = 12;
	e.CD::temp = 13;
	e.CD::CB::temp = 14;
	e.CD::CC::temp = 14;
	//e.CD::CC::CA::temp = 15;//以最终派生类去访问基类中的同名成员temp
	//e.CD::CC::CB::temp = 15;//出现调用不明确
	//因此引出了虚基类,来解决这个问题
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字界陈冠希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值