在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&)
用于描述这一点的术语是“隐藏”,而不是“覆盖”。默认情况下,派生类的成员将使任何具有相同名称的基类成员不可访问,无论它们是否具有相同的签名。如果要访问基类成员,可以使用以下命令将它们拉入派生类:using
宣言。在这种情况下,将以下内容添加到class Y
:
using X::spray;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)