В С++ функция-член базового класса переопределяется своей производной функцией класса с тем же именем, , даже если ее прототип (количество параметров, тип и константа) отличается? Я предполагаю, что это глупый вопрос, поскольку многие веб-сайты говорят, что прототип функции должен быть таким же, чтобы это произошло; но почему код ниже не компилируется? Я считаю, что это очень простой случай наследования.
#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&)