У меня есть код C ++, использующий наследование и переопределение функций одновременно, вот код:
#include <iostream>
#include <string>
using namespace std;
class Parent
{
protected:
virtual void G() const = 0;
public:
virtual void G(const string& s) const final { G(); }
};
class Child : public Parent
{
protected:
virtual void G() const override { cout<<"Child G"; }
};
int main()
{
Child *c = new Child();
c->G("test");
return 0;
}
При компиляции я получил ошибку: Child::G: function does not take 1 arguments
.Но когда я использую родительский указатель, вот так:
Parent *c = new Child();
Это работает.В качестве альтернативы, если я изменю имя публичного G
метода, он тоже будет работать.
Что плохого в использовании одного и того же имени (G
) для обоих методов?