La suppression dans la classe de base pourrait être incomplète. L'implémentation fournit tout ce que la classe de base peut faire, cependant. Une classe dérivée devrait donc appeler Base :: Delete. Sans une documentation appropriée, les programmeurs pourraient manquer cela.
Dans la norme 10.3: "Une fonction virtuelle déclarée dans une classe doit être définie, ou déclarée pure (10.4) dans cette classe, ou les deux;"
Cette compile (g ++ std = C++ 11 test.cc essai -o) et fonctionne avec bonheur:
#include <iostream>
struct X { virtual void f() = 0; };
struct Y : X { virtual void f(); };
void X::f() { std::cout << 'X' << std::endl;}
void Y::f() { X::f(); std::cout << 'Y' << std::endl;}
int main() {
Y y;
y.f();
return 0;
}
fonctions virtuelles pures sont utilisées pour faire des classes abstraites qui le mandat d'une interface. –
La suppression dans la classe de base peut être incomplète. L'implémentation fournit tout ce que la classe de base peut faire, cependant. Une classe dérivée devrait donc appeler Base :: Delete. Sans une documentation appropriée, les programmeurs pourraient manquer cela. –
Mais la fonction Delete dans la classe de base est une fonction virtuelle pure. Cela ne peut pas être impoli. – yancey