//派生类成员的标识与访问
//同名覆盖原则
//当派生类与基类中有相同成员时:
//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;
}
C++学习笔记_4:虚基类
最新推荐文章于 2021-06-30 16:19:21 发布