在C++中,即使其原型(參數'count,type和constness)不同,基類的成員函數是否會被其派生類函數重名爲?我猜這是一個愚蠢的問題,因爲很多網站都說函數原型應該與發生的相同;但爲什麼不能編譯下面的代碼?我相信這是一個非常簡單的繼承案例。C++繼承和函數重寫
#include <iostream>
using std::cout;
using std::endl;
class A {};
class B {};
class X
{
public:
void spray(A&)
{
cout << "Class A" << endl;
}
};
class Y : public X
{
public:
void spray(B&)
{
cout << "Class B" << endl;
}
};
int main()
{
A a;
B b;
Y y;
y.spray(a);
y.spray(b);
return 0;
}
GCC拋出
error: no matching function for call to `Y::spray(A&)'
note: candidates are: void Y::spray(B&)
得到了關於同一問題的C++常見問題解答,如果有人需要它,請詳細解釋:) http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq- 23.9 – legends2k 2010-01-29 11:40:26
說簽名應該是相同的,這有點危險。簽名是名稱修改和鏈接的基礎。兩個不同班級的成員總是擁有不同的簽名,即使這兩個成員優先於另一個班級。我認爲,即使說更長的時間,最好說「相同的參數類型,名稱和常量」。 – 2010-01-29 11:44:37
@litb:謝謝澄清!我想'原型'是在這裏的恰當的詞,我已經改變了它的問題:) – legends2k 2010-01-29 12:35:24