La clase base A
tiene una subclase B
, y B
tiene una subclase C
. A
implementa un método virtual doStuff()
, B
no, y C
hace. De C
, quiero llamar A
'ejecución de doStuff()
s (Lo hago desde dentro C
' ejecución de doStuff()
s pero eso no debería realmente importa.) ¿Debo llamar a:Llamando métodos idénticos en las clases base
A::doStuff();
O:
B::doStuff();
El primero parece más claro porque se refiere a la implementación real. Por otro lado, el segundo podría ser más útil si luego decido que B
necesita doStuff()
de manera diferente que A
. ¿Cuál es más estándar? ¿Cuál es más peligroso?
Me sorprendió un poco que B::doStuff()
no disparara ninguna advertencia, pero supongo que por definición B
tiene una implementación, incluso si es de la clase base. ¿La cadena de clases base y las implementaciones pueden ser arbitrariamente largas y complicadas? Por ejemplo, si tuviera A
hasta Z
, cada una de las subclases de la anterior, ¿podría haber implementaciones en algún lugar de la cadena, y llamar al método de cualquier clase simplemente subir la cadena hasta que encuentre una implementación?
Parece una alternativa muy ordenada y útil. – Luke