2008-09-22 10 views
5

La expresión 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.idioma de interfaz no virtual para más de dos niveles de herencia?

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

Respuesta

5

Funciona, porque la clase derivada puede anular una función virtual privada de una clase base, incluso si la función de 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(); 
}; 
1

La clase derivada puede decidir por sí mismo:

Usted puede simplemente anula completamente el método implementando la función virtual. Puede aumentar el método llamando a la función de clases "intermedias" en algún punto de su método de clase derivada.

Si eso no es lo que desea, debe configurarlo explícitamente en la clase 'middle'. Yo no lo haría. Si te encuentras deseando esto, probablemente signifique que no le has dado a la clase base suficientes puntos de personalización.

Cuestiones relacionadas