Lorsque je lis Effective C++, il est dit de ne jamais redéfinir une fonction non-virtuelle en C++.redéfinir une fonction non-virtuelle en C++
Cependant, quand je l'ai testé, le code ci-dessous se compile correctement. Alors, quel est le point? C'est une erreur ou juste une mauvaise pratique?
class A {
public:
void f() { cout<<"a.f()"<<endl;};
};
class B: public A {
public:
void f() { cout<<"b.f()"<<endl;};
};
int main(){
B *b = new B();
b->f();
return 0;
}
Belle réponse! Bref, au point, et montre à quel point la programmation émotionnelle est. – DarenW
Je ne suis pas d'accord, l'auteur Scott Meyers souligne que l'héritage public établit un invariant par rapport à la spécialisation pour la classe b. De plus, l'utilisation des classes est source de confusion lorsque le comportement du comportement f() dépend de la définition du pointeur et non de la définition de l'objet. Exemple: B x; A * ptr = & x; ptr-> f() // appelle la version de classe A de f() et non la version B de f() et cela prête à confusion. – TheChrisONeil