多重继承优点:
简单,清晰,更有利于复用。
多重继承缺点:
1)可能会产生菱形继承,存在二义性问题。
菱形继承
假如类B是从A1和A2两个类多重继承而来的,而A1和A2又有个共同的基类Base,那这样B类就包含了两个Base成员,这样就不但增加了存储空间,同时也引入了二义性,我调用Base里面的一个普通成员函数,我的this指针到底应该传哪一个Base呢?这时候就会直接出错。(解决方法虚拟继承)
菱形继承关系
我们C++语言来描述这种继承关系:
class Base{… … };
class A1 :public Base {… … };
class A2 :public Base {… … };
class B :public A1,public A2 {… … };
2)多重继承带来性能上的损失
当使用第一继承的基类指针来调用派生类的虚函数的时候,与单继承的情况没有什么异样,而如果以第二或后继的基类指针(或引用)的指向派生类的时候,需要把this指针调整回派生类对象的起始点,而这个偏移量是存放在虚函数表里面的,这样就多了一层内存的读取。
结论:
不要随意使用多重继承。大多数的情况,用has a(也就是类的组合法)会更好些。