Как сделать функцию-член функцией-другом в этом сценарии?

Я немного озадачен тем, как выполнить следующее, используя функции друзей.

Скажем, у меня есть класс A, функция-член которого ‘f’ должна быть объявлена ​​другом для класса B.

Как я понимаю, нормальным решением будет следующее:

Определите класс A, если только f объявлено не определенным

Определите класс B, включая объявление друга «f»

Определить «F»

Теперь, что если в классе A должны быть члены-данные типа B или контейнер элементов типа B, например, vector < B>.

Класс B, работающий в прямом направлении, похоже, работает (то есть без предупреждений / ошибок компилятора), но я не уверен, допустимо ли это в соответствии со стандартом C ++ 11. Кроме того, такое решение не позволит мне использовать конструктор класса B для обеспечения инициализатора в классе для членов класса класса A. Для этого можно было бы наилучшим образом выполнить все это в соответствии с C ++ 11 ?

Я попытался найти решение из самого стандарта, но не смог найти упоминания о таком сценарии. Я был бы счастлив, если бы кто-то мог указать мне на это.

PS Я действительно новичок, поэтому, пожалуйста, не думайте иначе в своих ответах. Я не возражаю против подробных ответов, хотя 🙂

1

Решение

Вы должны прочитать статью MSDN об этой проблеме: Функции члена класса и классы как друзья

По сути, вам нужно иметь тип класса A с функцией f() , а затем вы объявляете в типе класса B что существует функция A::f() который будет твоим другом.

Пример MSDN хорошо показывает это:

class A {
public:
int Func1( B& b );

private:
int Func2( B& b );
};

class B {
private:
int _b;

// A::Func1 is a friend function to class B
// so A::Func1 has access to all members of B
friend int A::Func1( B& );
};

int A::Func1( B& b ) { return b._b; }   // OK
int A::Func2( B& b ) { return b._b; }   // C2248
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]