類請看下面的代碼:成員函數隱藏在派生
#include <iostream>
using namespace std;
class A {
public:
A() {};
virtual void foo(double d) { cout << d << endl; }
virtual void foo(double d, int a) = 0;
};
class B : public A {
public:
B() {};
virtual void foo(double d, int a) { cout << d << endl << a << endl; }
};
int main()
{
B b;
b.foo(3.14);
return 0;
}
編譯器(試過G ++和Visual C++ 2008)說,有沒有像B無功能:FOO(雙)。 G ++的確切消息是:
main.cpp:21: error: no matching function for call to ‘B::foo(double)’
它看起來像hiding rule的效果,但在我看來,規則不應該用在這裏,因爲我不重寫富(雙)和兩個FOO方法定義在基類中。
我知道我可以在派生類B.
你能解釋一下爲什麼代碼不編譯和C的哪些規則++適用於這裏與
using A::foo;
聲明解決這一問題?
這只是「名稱隱藏」問題。爲什麼你不能只使用'使用A :: foo'子句? – ereOn 2010-07-05 07:56:04
不是一個確切的重複,但在這裏討論相同的問題:http://stackoverflow.com/questions/72010/c-overload-resolution – ereOn 2010-07-05 08:00:12
在這種情況下,如果你想實現你的純虛擬富方法你必須重新定義所有的方法名稱「foo」或爲純虛擬方法和實施方法選擇不同的名稱。 – Sergey 2010-07-05 08:56:36