класс — нужна помощь в использовании функций друзей в переполнении стека

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

#include<iostream>

using namespace std;

class one
{
private:
int age;
public:
one()
{
age=1;
}

void setData(int num)
{
age=num;
}

friend int returnOne()
{
return age;
}
};

class two
{
private:
int roll;
public:
two()
{
roll=0;
}

void setData(int num)
{
roll=num;
}

friend int returnTwo()
{
return roll;
}
};

int main()
{
one a;
two b;
cout<<a.returnOne()<<endl<<b.returnTwo()<<endl;
}

Я получаю следующую ошибку в C ++.

friend.cpp: In function ‘int returnOne()’:
friend.cpp:8:6: error: invalid use of non-static data member ‘one::age’
friend.cpp:20:9: error: from this location
friend.cpp: In function ‘int returnTwo()’:
friend.cpp:27:6: error: invalid use of non-static data member ‘two::roll’
friend.cpp:39:9: error: from this location
friend.cpp: In function ‘int main()’:
friend.cpp:47:10: error: ‘class one’ has no member named ‘returnOne’
friend.cpp:47:31: error: ‘class two’ has no member named ‘returnTwo’

РЕДАКТИРОВАТЬ
Спасибо. Это решило проблему.

Но теперь это приводит меня к другому вопросу. Разве ключевое слово «друг» теперь не ставит под угрозу цель использования private, так как теперь любой класс или функция может просто использовать функцию друга для доступа к частным элементам данных. Если да, то мы могли бы просто объявить элемент данных как public вместо private.Что такое особенное в использовании private?

2

Решение

посмотри на этот ссылка на сайт

Функция друга — это функция, которая не является членом класса, но
имеет доступ к закрытым и защищенным членам класса. друг
функции не считаются членами класса; они нормальные внешние
функции, которым предоставлены специальные права доступа. Друзья не в
область видимости класса, и они не вызываются с помощью выбора элемента
операторы (. и ->), если они не являются членами другого класса.
Функция Friend объявляется классом, который предоставляет доступ.
Объявление друга может быть размещено в любом месте объявления класса. Это
не влияет на ключевые слова контроля доступа.

4

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

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

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