相同的函数名,一个在尾部有const

时间:2011-08-31 08:02:50

标签: inheritance const

给出以下代码:

#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

1 个答案:

答案 0 :(得分:0)

B中的方法不会覆盖A中的方法,因此虚拟声明不应该(因为它不会)导致B中的方法被调用。考虑:

class foo
{
public:
    void bar();
    void bar() const;
}

这是两种不同的方法,一种是非const对象,另一种是const对象。

为了使代码能够正常工作,A中的方法也必须声明为const。