Как составить иерархию классов друзей? - PullRequest
1 голос
/ 19 декабря 2010

У меня есть class A, в котором есть только закрытые члены (включая данные, методы, конструкторы, деструктор ....).Также у меня есть class B, который является другом class A.И я хочу, чтобы все производные классы B (также есть шаблоны, унаследованные от B) тоже были друзьями class A.Есть какой-либо способ сделать это?

1 Ответ

1 голос
/ 19 декабря 2010

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;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...