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?
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?
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
È interessante che tu abbia scelto la formulazione esatta per dire che come questo sito web: http://www.cplusplus.com/doc/tutorial/inheritance/ – dicroce
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
No, non è, come documentato qui: http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4
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'. –
No, non è.
Edit: Per citare dal ++ standard C, sezione 11,4/8
amicizia non è né ereditato né transitiva.
Un'altra domanda a cui si doveva rispondere facilmente utilizzando un COMPILER. – shoosh
@shoosh: i compilatori non sono necessariamente conformi agli standard. Tale domanda dovrebbe essere risolta dallo standard, non dai compilatori. –
@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