以下是代码:
#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()
。如果您对此行为有任何解释,请提供帮助。
答案 0 :(得分:1)
在C ++中,您需要通过添加virtual
关键字virtual void foo()
来明确地将方法标记为可覆盖。