友元顾名思义就是类似于现实中的朋友的概念。举个例子比如带人回家做客,我们会首先带他去客厅,一般情况下是不会带人进卧室的。但是自己要好的朋友来家里玩就不一样了,不止可以带好朋友进客厅也可以进自己的卧室。
类似的,在类中有私有成员,公共成员。一般情况下类外是不能访问到私有成员的,这个私有成员就类似于上面例子中的卧室。那在不一般的情况下,我们怎样才能访问类中的私有成员呢?下面开始介绍:
友元目的: 让一个函数或者类可以访问另一个类中的私有成员。
实现方法:
1. 全局函数做友元 (全局函数可以访问类中的私有成员)
#includeusing namespace std; class Building { friend void goodfriend(Building* b); //引入友元!!! public: string settingroom;//客厅 Building();//构造函数 private: string bedroom;//卧室 }; Building::Building() { settingroom = "客厅"; bedroom = "卧室"; } void goodfriend(Building* b) { cout << "进" << b->settingroom << endl;//进客厅 cout << "进" << b->bedroom << endl;//进卧室 } int main() { Building b; goodfriend(&b); }
全局函数在不做友元的时候是不能访问类的私有成员,在类中加上声明友元后就可以访问。
格式: friend 函数名();
2.类做友元 (一个类能访问另一个类的私有成员)
#includeusing namespace std; class Building { friend class GoodFriend; public: string settingroom;//客厅 Building();//构造函数 private: string bedroom;//卧室 }; Building::Building() { settingroom = "客厅"; bedroom = "卧室"; } class GoodFriend { public: void visit(Building* b); }; void GoodFriend::visit(Building* b) { cout << "进" << b->settingroom << endl;//进客厅 cout << "进" << b->bedroom << endl;//进卧室 } int main() { Building b; GoodFriend g; g.visit(&b); }
类在不做友元的时候是不能访问另一个类的私有成员,在类中加上声明友元后就可以访问。
格式: friend class 类名;
3. 成员函数做友元 (一个类中的某个成员函数访问另一个类的私有成员)
#includeusing namespace std; class Building; class GoodFriend { public: GoodFriend(); void visit1(); void visit2(); Building* b; }; class Building { friend void GoodFriend::visit2(); public: string settingroom;//客厅 Building();//构造函数 private: string bedroom;//卧室 }; Building::Building() { settingroom = "客厅"; bedroom = "卧室"; } GoodFriend::GoodFriend() { b = new Building;//创建 } void GoodFriend::visit2() { cout << "进" << b->settingroom << endl;//进客厅 cout << "进" << b->bedroom << endl;//进客厅 } int main() { //Building b; GoodFriend g; g.visit2(); }
格式: friend 返回值类型 类名::方法名();



