C++学习笔记_4:虚基类

//派生类成员的标识与访问

//同名覆盖原则

//当派生类与基类中有相同成员时:
//1. 若未强行指名,则通过派生类对象使用的是派生类中的同名成员。
//2. 如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。

//二义性问题:
//1. 在多继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)--采用虚函数(第8章)或支配(同名覆盖)原则来解决。
//2. 当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性--采用虚基类来解决。


//虚基类
//虚基类的引入,用于有共同基类的场合

//声明
//以virtual 修饰说明基类,例:
//class B1:virtual public B 
//作用
//主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题.
//为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝
//注意:
//在第一级继承时就要将共同基类设计为虚基类。


#include <iostream.h>

class B0	//声明基类B0
{
public:	//外部接口
	int nV;
	void fun()
	{
		cout<<"Member of B0"<<endl;
	}
};
class B1: virtual public B0   //B0为虚基类,派生B1类
{
public:	//新增外部接口
	int nV1;
};
class B2: virtual public B0  //B0为虚基类派生B2类
{  
public:	//新增外部接口
	int nV2;
};
class D1: public B1, public B2	//派生类D1声明
{  
public:	//新增外部接口
	int nVd;
	void fund()
	{
		cout<<"Member of D1"<<endl;
	}
};

int main(void)		
{   
	D1 d1;		//声明D1类对象d1
	d1.nV=2;	//使用直接基类
	d1.fun();
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值