C++ Доступ к приватному члену в классе друга
У меня есть 2 класса (firstClass и secondClass), который firstClass является другом secondClass и имеет частное вложенное unordered_map, к которому я хочу получить доступ в функции secondClass. Так что в основном код выглядит так:
class secondClass;
typedef unordered_map STable<unsigned, unordered_map<unsigned, double> > NESTED_MAP;
class firstClass{
friend class secondClass;
void myfunc1(secondClass* sc){
sc->myfunc2(&STable);
}
private:
NESTED_MAP STable;
};
class secondClass{
public:
void myfunc2(NESTED_MAP* st){
//Here I want to insert some elements in STable.
//Something like:
st[1][2]=0.5;
}
};
int main(){
firstClass fco;
secondClass sco;
fco.myfunc1(&sco);
return 0;
}
Я знаю, что это должно быть тривиально, но я не знаю, как это решить. Любая идея? (Я изменил код и вопрос, чтобы сделать его более понятным)
1 ответ
Другому классу разрешен доступ к любому закрытому члену, поэтому вы можете просто вызывать методы и изменять свойства, как если бы они были общедоступными.
Здесь в документации сказано:
Объявление друга появляется в теле класса и предоставляет функции или другому классу доступ к закрытым и защищенным членам класса, в котором появляется объявление друга.
Тем не менее, взглянув на ваш пример, я бы лучше поменял место, где нужно разместить ключевое слово friend, поскольку мне кажется, что myfunc2 не должен быть публичным.
Ниже приведен пример, в котором я применил вышеупомянутое предложение, и это показывает, как обращаться с частными членами из класса друзей:
#include<unordered_map>
using namespace std;
class firstClass;
class secondClass{
friend class firstClass;
private:
void myfunc2(unordered_map<unsigned,double>& map){
map[1]=0.5;
}
};
class firstClass{
public:
void myfunc1(secondClass* sc){
// here firstClass is accessing a private member
// of secondClass, for it's allowed to do that
// being a friend
sc->myfunc2(STable);
}
private:
unordered_map<unsigned,double> STable;
};
int main(){
firstClass fco;
secondClass sco;
fco.myfunc1(&sco);
return 0;
}