C ++ не поддерживает это напрямую: "ребенок моего друга не мой друг" .
Вы должны использовать другой способ для реализации этого;Например, определите набор защищенных функций доступа в class B
:
class A {friend class B; int x, y};
class B
{
protected:
int& AccessX(A& a) {return a.x;}
int& AccessY(A& a) {return a.y;}
}
Это возможно только в том случае, если class A
очень мало.
Если class A
велико, вывам нужно будет подумать, что именно вы хотите, чтобы class B
и его производные классы делали с class A
, и выразить это как набор функций.Определите их как защищенные функции в class B
:
class A
{
A(): x(42), y(99) {}
friend class B;
int x, y;
}
class B
{
protected:
A Create() {return A();}
void Manage(A& object) {object.x += 1; object.y += 2;}
}