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