全局函数作友元
class Building
{
// 1.当函数要访问私有属性时,可以用friend关键字对函数进行声明
friend void goodfriend(Building* building);
// 2.类作友元,用friend对类进行声明
friend class Person;
// 3.成员函数作友元,用friend加上类名
friend void Person :: visit();
public:
string sittingroom;
Building() // 赋初值
{
sittingroom = "客厅";
bedroom = "卧室";
}
private:
string bedroom;
};
void goodfriend(Building* building)
{
cout << building->sittingroom << endl;
cout << building->bedroom << endl;
}
成员函数作友元
class Building; // Person类里面用到了,所以要先声明
class Person
{
public:
Person(); // 构造函数
void visit();// 成员函数
private:
Building* building; // 创建一个指向Building类的指针
};
// Building类要写在Person类外成员函数前面
class Building
{
friend void Person::visit(); // Person类的visit函数作友元,要加上Person声明
public:
string m_sittingroom;
Building(); // 构造函数
private:
string m_bedroom;
};
Person :: Person() // Person的构造函数初始化
{
building = new Building; // new一个新对象接收building
}
void Person::visit() // Person类的成员函数类外声明
{
cout << building->m_sittingroom << endl;
cout << building->m_bedroom << endl;
}
Building::Building()
{
this->m_sittingroom = "keting";
this->m_bedroom = "woshi";
}