3.4多基继承的二义性

如果已经声明了类A1,A2,再让B继承A1,A2,A1,A2中有名字相同的成员,如果都被B继承下去了,则在B中就有重复的成员,这时候就产生了二义性。

    class A1                                                                    class A2

      {                                                                             {

           public:                                                                                      public:

                       int a;                                                                                        int a;

                       void m();                                                                                  void m();  

    };                                                                                 };

   class b:public A1,public B;

  { 

           int a;

            void m();

            int a;

           void m();

  };

 则在创建对象的时候就会出现二义性;

    B b;

    b.a=2;  //此时就会报错;

    b.m();//错

   //加上作用域就好了;

    b.A1::a=2;// 错

    b.A1::m();  //对

    b.A1::a=2;

     b.A2::a=3;

共同基类产生的二义性:

    B继承A ,C又继承B,然后C间接的继承了A,则A中的成员在C中会出现两次,则出现二义性。

伪代码:

class B1:public A{.......};

class B2:public A{........};

class C:public B1,public B2;

class A

{

      int a;

     void m();

}

   class B1 :public A                                                      class B2:public:A

      {                                                                             {

           public:                                                                                      public:

                       int a;                                                                                        int a;

                       void m();                                                                                  void m();  

    };                                                                                 };

   class C:public B1,public B2

  { 

           int a;

            void m();

            int a;

           void m();

  };

  解决办法:在B继承A的时候加上virtual,这样叫虚基继承。

   

class B1:virtual publicA{-------};

class B2:virtual public B{----------};

class C:public B1,public B2;







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值