Jestem zorientowanym obiektowo entuzjastą programowania na poziomie początkującym. Mam napotkał następujący puzzle:Przyjaźń klasy - zagadka
class A {
};
class B {
protected:
friend class A;
};
class C {
public:
friend class B;
};
Odnosząc się do przykładowego kodu powyżej, przy założeniu, że powyższe klasy członków danych, co Nazwiska członków c mogłyby być wykorzystane w deklaracji członków?
Tylko prywatne członkowie
Tylko chronione członków
Wszystkie członków danych C za
Tylko członkowie publiczne
Żaden z członków danych C w *
Mój wybór to odpowiedź 4, ponieważ przyjaźń nie jest przechodnia. Dlatego A jest przyjacielem B, ale A nie jest przyjacielem C (mimo że B jest przyjacielem C). Czy to prawidłowe myślenie?
Ponadto, mój problem jest to, że do tej pory (w tutorialu) Poznałem exmaples w którym przyjaźń została zadeklarowane tak:
class X {
public:
friend class Y;
};
Jaka jest różnica, jeśli zamiast specifier publicznego używamy chroniony? Tak:
class X {
protected:
friend class Y;
};
+1 za dobrze sformułowane pytanie. – jrok