I tienen tres clases de base diferentes:C función ++ anulando
class BaseA
{
public:
virtual int foo() = 0;
};
class BaseB
{
public:
virtual int foo() { return 42; }
};
class BaseC
{
public:
int foo() { return 42; }
};
entonces derivo de la base como esto (sustituto X para A, B o C):
class Child : public BaseX
{
public:
int foo() { return 42; }
};
¿Cómo es la función de anulado en las tres clases base diferentes? ¿Son correctas mis tres suposiciones? ¿Hay alguna otra advertencia?
- Con BaseA, la clase secundaria no compila, la función virtual pura no está definida.
- Con BaseB, se llama a la función en el niño cuando se llama a foo en un BaseB * o un Niño *.
- Con BaseC, la función en el elemento secundario se invoca al llamar a foo en Child * pero no en BaseB * (se llama a la función en la clase principal).
¿Hay alguna razón específica por la que no quiero hacer esto? Aunque, por el contrario, no puedo encontrar un ejemplo donde * quiera * hacerlo. ¿Hay algún motivo técnico o simplemente se considera "mala práctica"? – Mizipzor
No veo ninguna razón técnica ... pero es realmente confuso. – Naveen
@mizipzor Tal vez estés heredando de las clases de otros, pero no tienes su código. No es un diseño ideal, pero puede suceder. – Kae