Sono un appassionato di programmazione orientata agli oggetti a livello principiante. Ho incontrato il seguente enigma:Classe amicizia - un puzzle
class A {
};
class B {
protected:
friend class A;
};
class C {
public:
friend class B;
};
Riferendosi al codice di esempio sopra esposto, ipotizzando le classi di cui sopra erano membri di dati, quali i nomi dei membri del C potrebbe essere utilizzato nelle dichiarazioni di membri di A?
Solo i membri privati
Solo i membri protetti
tutti i membri di dati di C
Solo i membri pubblici
Nessuno dei membri di dati di C *
La mia scelta è la risposta 4 in quanto l'amicizia non è transitiva. Pertanto, A è un amico di B, ma A non è un amico di C (anche se B è un amico di C). È questo il modo corretto di pensare?
Inoltre, il mio problema è che finora (nel tutorial) che ho incontrato exmaples in cui l'amicizia è stato dichiarato in questo modo:
class X {
public:
friend class Y;
};
Qual è la differenza se al posto dello specificatore pubblico usiamo il protetto uno? Come quella:
class X {
protected:
friend class Y;
};
+1 per una domanda ben formulata. – jrok