c++允许 友元 访问私有数据。
友元的语法:
friend关键字只出现在声明处
其他类、类成员函数、全局函数都可声明为友元
友元函数不是类的成员,不带this指针
友元函数可访问对象任意成员属性,包括私有属性。
普通全局函数作为类的友元
class Room
{
friend void myBestFriend(Room &room);
private:
string bedRoom;
public:
string sittingRoom;
public:
Room()
{
this->bedRoom = "卧室";
this->sittingRoom = "客厅";
}
};
void myBestFriend(Room &room)
{
cout<<"好朋友访问了你的"<< room.sittingRoom <<endl;
cout<<"好朋友访问了你的"<< room.bedRoom <<endl;
}
void test0()
{
Room myRoom;
myBestFriend(myRoom);
}
类的某个成员函数、类的整体作为另一个类的友元
#include <iostream>
#include <string>
using namespace std;
class Room;
class BestFriend
{
public:
void myBestFriend1(Room &room);
void myBestFriend2(Room &room);
};
class Room
{
friend class BestFriend;//一个类整体作为另一个类的友元
//friend void BestFriend::myBestFriend1(Room &room);//一个类的成员 作为另一个类的友元
private:
string bedRoom;
public:
string sittingRoom;
public:
Room()
{
this->bedRoom = "卧室";
this->sittingRoom = "客厅";
}
};
void test0()
{
BestFriend Tom;
Room myRoom;
Tom.myBestFriend1(myRoom);
Tom.myBestFriend2(myRoom);
}
int main(int argc, char *argv[])
{
test0();
return 0;
}
void BestFriend::myBestFriend1(Room &room)
{
cout<<"好朋友1访问了你的"<< room.sittingRoom <<endl;
cout<<"好朋友1访问了你的"<< room.bedRoom <<endl;
}
void BestFriend::myBestFriend2(Room &room)
{
cout<<"好朋友2访问了你的"<< room.sittingRoom <<endl;
cout<<"好朋友2访问了你的"<< room.bedRoom <<endl;
}