全局函数 做 友元函数
类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?
解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。
程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。
让全局的好基友函数 变为 我的好朋友 友元函数
友元函数 目的:访问类中的私有成员属性
全局函数做友元函数
全局函数 写到类中作声明 并在前面关键字 friend
class Building {
friend void goodGay(Building* building);
public:
Building() {
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
void goodGay(Building* building) {
cout << "A goodGay is visiting " << building->m_SittingRoom << "。" << endl;
cout << "A goodGay is visiting " << building->m_BedRoom << "。" << endl;
}
void test8() {
Building* building = new Building;
goodGay(building);
}
让整个类 做友元类
friend class 类名
友元类 是单向, 不可传递的。
成员函数 做 友元函数
friend void goodGay::visit();
/*
只让 visit 可以作 Building 的好朋友
visit2 不可以访问私有属性
*/
class Building;
class goodGay {
public:
goodGay();
void visit();
void visit2();
private:
Building* building;
};
class Building {
//让成员函数 visit 作为友元函数
friend void goodGay::visit();
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
goodGay::goodGay() {
building = new Building;
}
void goodGay::visit() {
cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}
void goodGay::visit2() {
cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}
Building::Building() {
this->m_SittingRoom == "客厅";
this->m_BedRoom = "卧室";
}
void test08() {
goodGay gg;
gg.visit();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)