在c ++中从base方法调用重写的子方法

时间:2015-03-31 19:15:19

标签: c++ inheritance override method-overriding

以下是代码:

#include <iostream>
class A 
{
public:
  void foo()
  {
    cout<<"this is base foo()"<<endl;
  }

  void callfoo()
  {
    foo();
  }
};

class B: public A
{
public:
  void foo()
  {
    cout<<"this is child foo()"<<endl;
  }
};

int main()
{
  B b;
  b.callfoo(); //Output: "this is base foo()"
  b.foo();     //Output: "this is child foo()"
  return 0;
}

现在,当我拨打b.callfoo()时,foo()调用基类A的callfoo(),而不是调用子类B的foo()。在B类中,我们已覆盖{ {1}}有一个新的实施,但foo()仍在调用基础callfoo()而不是子foo()。如果您对此行为有任何解释,请提供帮助。

1 个答案:

答案 0 :(得分:1)

在C ++中,您需要通过添加virtual关键字virtual void foo()来明确地将方法标记为可覆盖。