一.多继承
- 多继承的作用
实际生活中,一些事物往往会拥有两个或两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念。
C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。 - 优缺点
• 多重继承的优点很明显,就是对象可以调用多个基类中的接口
• 多重继承的缺点是什么呢?如果派生类所继承的多个基类有相同的基类,而派生类对象需要调用这个祖先类的接口方法,就会容易出现二义性
二.浅说多继承与虚继承
- 一个派生类可以有很多基类,一个派生类指定多个基类,这样的继承结构被称做多继承。
- 多继承语法
2.1语法:
class B:
{
public:
int a;
};
class A:
{
public:
int a;
};
class D : public B , public C
{
public:
void fun()
{
//this->a; //error: member 'a' found in multiple base classes of different types
}
};
2.2 多继承中存在的问题
(1)存放多份数据(且数据内容相同)、存储空间大,据冗余。
(2)容易出现二义性 。。
【1】在继承时,基类之间、或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。
【2】若使用类名限定,访问起来不方便
2.3 如何解决多继承的二义性情况
(1)解决办法一 – 类名限定 (访问起来不方便)
调用时指名调用的是哪个类的函数,如
c1.A::f();
c1.B::f();
(2) 虚基类(用于有共同基类的场合)
虚基类主要用来解决多继承时,可能对同一基类继承多次从而产生的二义性 , 为派生类提供共同的基类成员,而不重复产生多次拷贝。
- 虚继承 (虚继承也是继承的一种扩展)
3.1 虚继承语法
(1)提取公因式,提取各父类中相同的成员,构成祖父类(虚基类)
(2)让各父类,继承祖父类,采用虚继承
3.2 demo
//封装一个共同的基类
class Base{
public:
Base();
//相同的成员
void prinT()
{
cout<<"a = "<<endl;
}
int a ;
};
class AA : virtual public Base
{
public:
AA();
// void prinT(){