在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