Se virtual
debe implementar una función pura en un tipo derivado que se instanciará directamente, sin embargo, el tipo base aún puede definir una implementación. Una clase derivada puede llamar explícitamente a la implementación de la clase base (si los permisos de acceso lo permiten) usando un nombre de ámbito completo (llamando A::f()
a su ejemplo, si A::f()
fuera public
o protected
). Algo como:
class B : public A {
virtual void f() {
// class B doesn't have anything special to do for f()
// so we'll call A's
// note that A's declaration of f() would have to be public
// or protected to avoid a compile time problem
A::f();
}
};
El caso de uso que se me ocurre es cuando hay un comportamiento predeterminado más o menos razonable, pero el diseñador de la clase quiere que ese tipo de comportamiento predeterminado se invoque solo explícitamente. También puede ser el caso de lo que desea que las clases derivadas realicen siempre su propio trabajo, pero también puedan llamar a un conjunto común de funcionalidades.
Tenga en cuenta que, aunque está permitido por el lenguaje, no es algo que veo comúnmente utilizado (y el hecho de que se puede hacer parece sorprender a la mayoría de los programadores de C ++, incluso los experimentados).
deported
. (ya sea en un .inl o .cpp para referirse a las prácticas comunes de nomenclatura de archivos).