继承虚函数

遇到遇到warning C4250顺便发现这个问题,自己原来想当然的想法是错的


多个类顺序继承

class A

{

public:

virtual int num(){return 0}

};

class B:public A

{

public:

virtual int num(){return 1}

};

class C:public B

{

public:

virtual int num(){return 2}

};

class D:public C

{

public:


};

A* pA = new D;

B* pB = pA;

C* pC = pA;


pA->num();  //输出 2

pB->num();  //输出 2

pC->num();  //输出 2

原来多态会使用距离实体对象类型最近的虚函数,如果把D加上num(),那就很好理解了,会使用D的num()


在说说warning C4250:当使用菱形继承并且子类函数和了父类函数同名时会报错

struct base {
   virtual int number() { return 0; } 
};
struct weak : public virtual base {
   void print() { // seems to only depend on base, but depends on dominant
      std::cout << number() << std::endl;
   }
};
struct dominant : public virtual base {
   int number() { return 5; }
};
struct derived : public weak, public dominant {}

int main() {
   weak w; w.print();    // 0
   derived d; d.print(); // 5
}
但是我认为按照前面的顺序继承的说法,这个结果是对的啊,新建了一个

struct dominant2 :public dominant
{
int number(){return 6;}
};

让derived 继承 dominant2 ,结果输出6,个人认为这个就是前面顺序继承的原理,为什么要报错呢?
不知道会有什么隐患。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值