#include <iostream>
using namespace std;
class Duck {
public:
virtual void quack() = 0;
};
class BigDuck : public Duck {
public:
// void quack(); (uncommenting will make it compile)
};
void BigDuck::quack(){ cout << "BigDuckDuck::Quack\n"; }
int main() {
BigDuck b;
Duck *d = &b;
d->quack();
}
Powyższy kod nie kompiluje. Jednakże, gdy deklaruję wirtualną funkcję w podklasie, kompiluje się ona poprawnie.Dlaczego muszę redeclare funkcji wirtualnej podczas przesłonięcia [C++]
Jeśli kompilator ma już podpis funkcji, której podklasa zastąpi, dlaczego jest wymagana redeclaracja?
Jakieś spostrzeżenia?
Jakiego błędu kompilatora otrzymujesz? –
Mimo że w tym przykładzie widzimy abstrakcyjną klasę podstawową, to pytanie jest również ogólnie poprawne. – xtofl
Mogłem, chociaż nie wiedząc, jakiego kompilatora używasz, może nie dostać tego samego (lub jakiegokolwiek) błędu :) –