Cuando leo C++ eficaz, dice, nunca redefinir una función no virtual en C++.redefinir una función no virtual en C++
Sin embargo, cuando lo probé, el siguiente código se compila correctamente. ¿Entonces cuál es el punto? ¿Es un error o simplemente una mala práctica?
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;
}
Lovely answer! Breve, al grano, y muestra cómo es la programación emocional. – DarenW
No estoy de acuerdo, el autor Scott Meyers señala que la herencia pública establece un invariante sobre la especialización para la clase b. Además, el uso de clases es confuso cuando el comportamiento del comportamiento f() depende de la definición del puntero y no de la definición del objeto. Ejemplo: B x; A * ptr = & x; ptr-> f() // llama a la versión de clase A de f() y no a la versión de clase B de f() y eso es confuso. – TheChrisONeil