友元的关键字是 friend
友元的三种实现
- 全局函数做友元
- 类做友元
- 成员函数做友元
全局函数作为一个类的友元,在该类首行写上函数声明,加上一个friend即可。
#include2.类做友元using namespace std; #include // class building { //goodfriend是building的友元,所以该函数可以访问building中的私有成员 friend void goodfriend(building* building); public: building() { m_sittingroom = "客厅"; m_bedroom = "卧室"; } public: string m_sittingroom; private: string m_bedroom; }; //全局函数 void goodfriend(building *building) { cout << "全局函数正在访问:" << building->m_sittingroom << endl; cout << "全局函数正在访问:" << building->m_bedroom << endl; } void test01() { building building; goodfriend(&building); } int main() { test01(); //test02(); system("pause"); return 0; }
将友元类以函数声明的方式提到类首行中即可
//涉及到类外实现函数 #include3.成员函数做友元using namespace std; #include // class Building { friend class goodfriend; public: Building(); public: string m_sittingroom; private: string m_bedroom; }; //是Building的类外构造函数 Building::Building() { m_sittingroom = "客厅"; m_bedroom = "卧室"; } class goodfriend { public: goodfriend(); void visit();//参观函数访问building中的属性 Building* building; }; //是goodfriendg的类外构造函数 goodfriend::goodfriend() { building = new Building;//创建一个新的建筑对象 } //goodfriend里的局部函数 void goodfriend::visit() { cout << "友元类正在访问" << building->m_sittingroom << endl; cout << "友元类正在访问" << building->m_bedroom << endl; } void test01() { goodfriend gg; gg.visit(); } int main() { test01(); //test02(); system("pause"); return 0; }
和类做友元有点类似,但是成员函数声明一个就只能用一个,而类声明一个,类内的成员函数就都可以使用了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)