Рассмотрим следующий код:
#include <iostream>
class A{
friend class C;
int a{42};
};
class B: private A{
friend class C;
};
class C: private B {
public:
void print() {std::cout << a << '\n';}
};
int main() {
C c;
c.print();
}
Согласно этому ответу , переменная-член A::a
присутствует во всех классах, но ее видимость отличается, т.е.видимый в B
или C
, если мы не сделаем B
или C
другом A
.У меня вопрос, почему я должен сделать C
другом и A
и B
?Хотелось бы, чтобы декларация друга в A
была бы достаточной.Если я удаляю объявление friend class C;
из A
или B
, код не компилируется.