2009-02-28 15 views
14

Supponiamo che ho una classe Base:L'amicizia è ereditata in C++?

class Base { 
    friend SomeOtherClass; 
}; 

E c'è un altro (diverso) classe che eredita da Base:

class AnotherClass : public Base {} 

è l'amicizia ereditata come bene?

+0

Un'altra domanda a cui si doveva rispondere facilmente utilizzando un COMPILER. – shoosh

+8

@shoosh: i compilatori non sono necessariamente conformi agli standard. Tale domanda dovrebbe essere risolta dallo standard, non dai compilatori. –

+0

@shoosh Quale compilatore? VS per windows o g ++ per unix? Quale versione dello standard C++? Ci sono molte domande che puoi porre anche se il compilatore funziona o non funziona. – user3728501

risposta

19

In linea di principio, una classe derivata eredita tutti i membri di una classe base, tranne:

* its constructor and its destructor 
* its operator=() members 
* its friends 

Quindi, no. Gli amici non sono ereditati

+5

È interessante che tu abbia scelto la formulazione esatta per dire che come questo sito web: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce

+0

Forse una buona domanda da porsi ora è che puoi fare in modo che l'amicizia sia ereditata ? Sarebbe certamente utile per quello che sto facendo piuttosto che scrivere un elenco di tutte le classi che voglio avere "amicizia". – user3728501

7
+0

L'esempio nel collegamento mostra il caso opposto alla domanda dell'OP. Vorrei aggiungere che 'SomeOtherClass' avrà accesso ai campi' Base' e ​​ai metodi ereditati negli oggetti di 'AnotherClass'. –

9

No, non è.

Edit: Per citare dal ++ standard C, sezione 11,4/8

amicizia non è né ereditato né transitiva.

Problemi correlati