友元的作用:
在类外访问一个类的私有成员
class Building;//必须在使用Building类之前声明这个类
// 好朋友类
class GoodFriend {
public:
void visit(Building& building);//在类内声明类外定义
};
class Building {
// 告诉编译器GoodFriend类是我的好朋友,可以访问我当中的私有成员。
friend class GoodFriend; // 友元类
public:
string m_SittingRoom; // 客厅
Building();
private:
string m_BedRoom; // 卧室
};
Building::Building() {
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
void GoodFriend::visit(Building& building) {
cout << "正在访问:" << building.m_SittingRoom << endl;
cout << "正在访问:" << building.m_BedRoom << endl;
}
两种错误情况
1.直接使用Building类而上面未声明Building类
2.虽然声明了Building类但编译器仍不知道building对象里面有哪些成员,如下会报错,解决方法是声明和对象分开
class Building;//必须在使用Building类之前声明这个类
// 好朋友类
class GoodFriend {
public:
void visit(Building& building){
cout << "正在访问:" << building.m_SittingRoom << endl;
cout << "正在访问:" << building.m_BedRoom << endl;
};
};
完成错误解决之后可访问
int main() {
Building building;
GoodFriend gf;
gf.visit(building);
return 0;
}