给出以下代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual void func() {cout << "func A" << endl;}
};
class B : public A
{
public:
void func() const {cout << "func B" << endl;}
};
int main()
{
A *pa = new B;
pa->func();
B *pb = new B;
pb->func();
return 0;
}
输出是:
func A // pa->func();
func B // pb->func();
为什么,在执行pb->func();
时,B的方法会起作用而不是另一个(B从A继承)?
谢谢,Ronen
答案 0 :(得分:0)
B中的方法不会覆盖A中的方法,因此虚拟声明不应该(因为它不会)导致B中的方法被调用。考虑:
class foo
{
public:
void bar();
void bar() const;
}
这是两种不同的方法,一种是非const对象,另一种是const对象。
为了使代码能够正常工作,A中的方法也必须声明为const。