Red de conocimiento informático - Conocimiento sistemático - Clase base para clases derivadas

Clase base para clases derivadas

Como se mencionó anteriormente, una nueva clase derivada creada mediante el proceso de herencia consta de los miembros de la clase base y los nuevos miembros agregados por la clase derivada. En herencia múltiple, se puede construir un diagrama de jerarquía donde la misma clase base puede ser parte de múltiples clases derivadas. La figura 9.4 muestra dicho diagrama.

Múltiples clases base

Como se describe en la herencia múltiple, una clase puede derivarse de múltiples clases base. En el modelo de herencia múltiple, una clase derivada se deriva de múltiples clases base y las clases base se describen utilizando el componente de sintaxis de la tabla de clases base.

clase CollectionOfBook: Libro público, Colección pública

{

//nuevo miembro

};

El orden en el que se describen las clases base normalmente no importa, excepto en ciertas situaciones donde se llaman constructores y destructores. En estos casos, el orden en el que se describen las clases base afecta el orden que se enumera a continuación.

El orden en el que se inicializan los constructores. Este orden de descripción es importante si su código depende de que la parte Libro de CollectionOfBook se inicialice antes que la parte Colección. La inicialización se producirá en el orden descrito en la tabla de clases base.

Al activar el destructor se borra la secuencia de trabajo. Del mismo modo, el orden es importante si desea conservar ciertas partes mientras limpia otras partes de la clase. Los destructores se llaman en el orden inverso como se describe en la tabla de clases base.

Nota: El orden de las descripciones de las clases base afectará la distribución de memoria de la clase. No tome ninguna decisión de programación sobre el orden de los miembros de la clase base en la memoria.

Cuando declaras una tabla de clases base, no puedes especificar el mismo nombre de clase más de una vez. Pero para una clase derivada, su clase base indirecta puede tener varios nombres de clase idénticos.

Clases base virtuales

Debido a que una clase puede convertirse en una clase base no dirigida para una clase derivada varias veces, C proporciona una manera de optimizar el trabajo de las clases base.

Tenga en cuenta que hay dos subobjetos Queue en el objeto LunchCashierQueue. Cola pública virtual

{

/tabla de membresía

};

clase LunchCashierQueue: LunchQueue pública, CashierQueue pública

{

/tabla de membresía

};

Para un tipo determinado, una clase puede tener componentes tanto virtuales como no virtuales.

Si una clase derivada anula funciones virtuales heredadas de una clase base virtual y la clase derivada usa un puntero a la clase base virtual para llamar a estos constructores y destructores, el compilador La clase introduce un implícito adicional " campo "vtordisp". La opción del compilador /vd0 deshabilita este miembro posicional constructor/destructor vtordisp implícito adicional. Desactive vtordisp sólo si está seguro de que todas las llamadas al constructor o destructor de clases son virtuales.

La opción del compilador /vd afecta al modo de compilación global. En un enfoque basado en clases, el dominio vtordisp se puede activar o desactivar usando la pragma vtordisp:

#pragma vtordisp(off)

class GetReal: virtual public{... };

#pragma vtordisp(encendido)