砖石继承(菱形继承)

一、概念
砖石继承即菱形继承
菱形继承即多个类继承了同一个公共基类,而这些派生类又同时被一个类继承
即B和C类共同继承了A类,同时C类又多重继承了B类和C类。
例子:

    class  A{
      //基类A
        private:
            int a;
            int b;
        public:
            A();
            int sum(){
   
   return a+b};
        }
    class B :public A{   };

    class C :public A{     };

    class D :public B,public C{   };

砖石继承

二、砖石继承的问题:
B类和C类通过public继承了A类,同时D类通过多重继承的机制继承了B类和C类,也就意味着D类中有两份A类的成员(数据和方法),D类的对象有两份A类的子对象。
main()中调用fun()时,编译器不知道是调用B的fun()还是C的fun(),所以FUN方法的调用不明确,编译报错

三、解决方案
1、使用域限定来明确需要使用的函数
int main()
{
D d;
d.A::fun();
d.B::fun();
d.C::fun();
return 0;
}

2、虚函数

使用关键字:virtual

class C : virtual public A{ };
class B: virtual public A{ };
砖石继承的问题解决方案--虚函数

四、虚函数
请看后续更新文章

猜你喜欢

转载自blog.csdn.net/wtchhb/article/details/62994258
今日推荐