2011-08-31 37 views
0

常量:的功能相同的名字,一個與給定下面的代碼尾部

#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繼承的)?

感謝,羅南

回答

0

在乙的方法,在這樣的虛擬聲明不應該不覆蓋的方法(因爲它不)引起B中的方法被調用。考慮:

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

這些是兩種不同的方法,一種叫做非const對象,另一種叫做const對象。

爲了讓您的代碼正常工作,A中的方法也必須聲明爲const。