2025年C++ 之 友元

C++ 之 友元友元的作用 c 允许 友元 访问 私有数据 友元的分类 友元函数 友元成员函数 友元类 友元的语法 friend 关键字只出现在声明处 其他类 类成员函数 全局函数都可声明为友元 友元函数不是类的成员 不带 this 指针 友元函数可访问对象任意 成员属性 包括私有属性

大家好,我是讯享网,很高兴认识大家。

友元的作用:c++允许 友元 访问 私有数据。
友元的分类:友元函数,友元成员函数,友元类。
友元的语法
friend关键字只出现在声明处 其他类、类成员函数、全局函数都可声明为友元 友元函数不是类的成员不带this指针 友元函数可访问对象任意成员属性,包括私有属性。

友元函数

即 普通全局函数作为类的友元


讯享网

#include <iostream> #include <string> //房间类 class Room { //将goodGayVisit作为类的友元函数 //goodGayVisit 访问 类中所有数据 但是 它不是类的成员 friend void goodGayVisit(Room &room); private: string bedRoom;//卧室 public: string sittingRoom;//客厅 public: Room() { this->bedRoom = "卧室"; this->sittingRoom="客厅"; } }; // 普通全局函数 作为 类的友元 //好朋友 访问 我的房间 void goodGayVisit(Room &room) { cout<<"好朋友访问了你的"<<room.sittingRoom<<endl; cout<<"好朋友访问了你的"<<room.bedRoom<<endl;//ok } void test01() { Room myRoom; goodGayVisit(myRoom); } 

讯享网

友元成员函数

即 类的某个成员函数 作为 另一个类的友元

讯享网#include <iostream> #include <string> using namespace std; class Room;//Room向前声明 class GoodGay { public: void visit1(Room &room); void visit2(Room &room); }; class Room { //如果想方 visit2作为Room类的友元 那么Visit2就可以访问 Room的私有数据 //一定要记得 加类作用域 friend void GoodGay::visit2(Room &room); private: string bedRoom;//卧室 public: string sittingRoom;//客厅 public: Room() { this->bedRoom = "卧室"; this->sittingRoom="客厅"; } }; void GoodGay::visit1(Room &room) { cout<<"好朋友visit1访问了你的"<<room.sittingRoom<<endl; //cout<<"好朋友visit1访问了你的"<<room.bedRoom<<endl;//不能访问 Room私有数据 } void GoodGay::visit2(Room &room) { cout<<"好朋友visit2访问了你的"<<room.sittingRoom<<endl; cout<<"好朋友visit2访问了你的"<<room.bedRoom<<endl; } int main(int argc, char *argv[]) { Room myRoom; GoodGay goodGay; goodGay.visit1(myRoom);//只能访问客厅 goodGay.visit2(myRoom);//客厅 卧室 都可以访问 return 0; } 

友元类

#include <iostream> #include <string> using namespace std; class Room;//Room向前声明 class GoodGay { public: void visit1(Room &room);//此处的Room 被上方 class Room void visit2(Room &room); }; class Room { //将GoodGay作为Room的友元 //GoodGay 所有成员函数 都可以访问 Room私有数据 friend class GoodGay; private: string bedRoom;//卧室 public: string sittingRoom;//客厅 public: Room() { this->bedRoom = "卧室"; this->sittingRoom="客厅"; } }; void GoodGay::visit1(Room &room) { cout<<"好朋友visit1访问了你的"<<room.sittingRoom<<endl; cout<<"好朋友visit1访问了你的"<<room.bedRoom<<endl; } void GoodGay::visit2(Room &room) { cout<<"好朋友visit2访问了你的"<<room.sittingRoom<<endl; cout<<"好朋友visit2访问了你的"<<room.bedRoom<<endl; } int main(int argc, char *argv[]) { Room myRoom; GoodGay goodGay; goodGay.visit1(myRoom); goodGay.visit2(myRoom); return 0; } 
小讯
上一篇 2025-03-20 14:20
下一篇 2025-04-07 11:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126277.html