Я немного озадачен тем, как выполнить следующее, используя функции друзей.
Скажем, у меня есть класс A, функция-член которого ‘f’ должна быть объявлена другом для класса B.
Как я понимаю, нормальным решением будет следующее:
Определите класс A, если только f объявлено не определенным
Определите класс B, включая объявление друга «f»
Определить «F»
Теперь, что если в классе A должны быть члены-данные типа B или контейнер элементов типа B, например, vector < B>.
Класс B, работающий в прямом направлении, похоже, работает (то есть без предупреждений / ошибок компилятора), но я не уверен, допустимо ли это в соответствии со стандартом C ++ 11. Кроме того, такое решение не позволит мне использовать конструктор класса B для обеспечения инициализатора в классе для членов класса класса A. Для этого можно было бы наилучшим образом выполнить все это в соответствии с C ++ 11 ?
Я попытался найти решение из самого стандарта, но не смог найти упоминания о таком сценарии. Я был бы счастлив, если бы кто-то мог указать мне на это.
PS Я действительно новичок, поэтому, пожалуйста, не думайте иначе в своих ответах. Я не возражаю против подробных ответов, хотя 🙂
Вы должны прочитать статью 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
Других решений пока нет …