Parole chiave di ereditarietà

Sezione specifica Microsoft

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

dove:

class-name
Il nome della classe che si sta dichiarando.

C++ consente di dichiarare un puntatore a un membro di classe prima della definizione della classe. Ad esempio:

class S;
int S::*p;

Nel codice precedente viene p dichiarato come puntatore a un membro integer della classe S. Tuttavia, class S non è ancora stato definito in questo codice, ma è stato dichiarato solo. Quando il compilatore rileva tale puntatore, deve effettuare una rappresentazione generalizzata del puntatore. La dimensione della rappresentazione dipende dal modello di ereditarietà specificato. Esistono tre modi per specificare un modello di ereditarietà per il compilatore:

  • Nella riga di comando usando l'opzione /vmg

  • Uso del pointers_to_members pragma

  • Uso delle parole chiave di ereditarietà __single_inheritance, __multiple_inheritancee __virtual_inheritance. Con questa tecnica viene controllato il modello di ereditarietà in base alle classi.

    Nota

    Se si dichiara sempre un puntatore a un membro di una classe dopo la definizione della classe, non è necessario utilizzare nessuna di queste opzioni.

Se si dichiara un puntatore a un membro di classe prima della definizione della classe, può influire negativamente sulle dimensioni e sulla velocità del file eseguibile risultante. Più complessa è l'ereditarietà utilizzata da una classe, maggiore è il numero di byte necessari per rappresentare un puntatore a un membro della classe . Più grande è il codice necessario per interpretare il puntatore. L'ereditarietà singola (o nessuna) è meno complessa e l'ereditarietà virtuale è più complessa. I puntatori ai membri dichiarati prima che la classe sia definita usano sempre la rappresentazione più grande e complessa.

Se l'esempio precedente viene modificato in:

class __single_inheritance S;
int S::*p;

indipendentemente dalle opzioni della riga di comando o dai pragma specificati, i puntatori ai membri di class S useranno la rappresentazione più piccola possibile.

Nota

La stessa dichiarazione con prototipo della rappresentazione della classe puntatore a membro deve verificarsi in ogni unità di conversione che dichiara i puntatori ai membri di quella classe e la dichiarazione deve verificarsi prima che vengano dichiarati i puntatori ai membri.

Per la compatibilità con le versioni precedenti, , e sono sinonimi per __single_inheritance, __multiple_inheritancee __virtual_inheritance a meno che non sia specificata l'opzione /Za del compilatore (Disabilita estensioni del linguaggio)._virtual_inheritance_multiple_inheritance_single_inheritance

Fine sezione specifica Microsoft

Vedi anche

Parole chiave