Pregunta

El lenguaje de interfaz no virtual describe cómo los métodos virtuales son puntos de personalización no públicos y los métodos públicos no son virtuales para permitir que la clase base controle en todo momento cómo se llaman los puntos de personalización.

Este es un modismo elegante y me gusta usarlo, pero ¿cómo funciona si la clase derivada es una clase base en sí misma?

¿Fue útil?

Solución

Funciona porque la clase derivada puede anular una función virtual privada de una clase base, incluso si la función de la clase base anula su función de clase base.

Esto es perfectamente legal:


class Parent
{
public:
  int foo() {return bar();} // the non-virtual public interface
private
  virtual int bar();
};

class Child : public Parent
{
private:
  virtual int bar();  // overrides Parent::bar()
};

class Grandchild : public Child
{
private:
  virtual int bar(); // overrides Child::bar();
};

Otros consejos

La clase derivada puede decidir por sí misma:

Puede anular el método por completo implementando la función virtual.Puede aumentar el método llamando a la función de clases 'intermedias' en algún momento de su método de clase derivada.

Si eso no es lo que desea, debe configurarlo explícitamente en la clase "intermedia".Aunque yo no lo haría.Si deseas esto, probablemente significa que no le diste a la clase base suficientes puntos de personalización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top