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
pragmaUso delle parole chiave di ereditarietà
__single_inheritance
,__multiple_inheritance
e__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_inheritance
e __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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per