C++Note 友元

程序中,有些私有属性,也想让类外特殊的一些函数或者类进行访问

友元的目的是让 一个函数或者类 访问另一个类中的私有成员

友元的关键字:friend

友元的三种实现:

  做友元

  全局函数做友元

  成员函数做友元

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Room
 5 {
 6     friend void GoodFirend(Room* rom);//类中声明 表明全局函数GoodFriend()为友元
 7 public:
 8     Room()
 9     {
10         m_BedRoom = "卧室";
11         m_SittingRoom = "客厅";
12     }
13 public:
14     string m_SittingRoom;//客厅
15 private:
16     string m_BedRoom;//卧室
17 };
18 void GoodFirend(Room *rom)
19 {
20     cout << "私密朋友可以访问" << rom->m_SittingRoom << endl;
21 }
22 void test()
23 {
24     Room r;
25     GoodFirend(&r);
26 }
复制代码

友元类:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 class Room;// 声明
 4 class GoodFriend
 5 {
 6 public:
 7     GoodFriend();
 8     void visit();
 9     Room* room;
10 };
11 class Room
12 {
13     friend class GoodFriend;//表明GoodFriend类为本类的友元 可以访问本类中的私有成员
14 public:
15     Room();
16 public:
17     string m_SittingRoom;//客厅
18 private:
19     string m_BedRoom;//卧室
20 };
21 GoodFriend::GoodFriend()
22 {
23     room = new Room;//实例化房屋  
24 }
25 Room::Room()//类外写成员函数 前面Room表明是Room类  后面Room表明为构造函数Room 
26 {
27     m_BedRoom = "卧室";
28     m_SittingRoom = "客厅";
29 }
30 void GoodFriend::visit()
31 {
32     cout << "私密朋友可以访问" << room->m_SittingRoom <<endl;
33     cout << "私密朋友可以访问" << room->m_BedRoom << endl;
34 }
35 void test()
36 {
37     GoodFriend gf;
38     gf.visit();
39 }
复制代码

成员函数做友元:

复制代码
 1 #include <iostream>
 2 using namespace std;
 3 class Room;
 4 class GoodFriend
 5 {
 6 public:
 7     GoodFriend();
 8     void visit();//让visit可以访问Room中私有成员
 9     void visit2();//visit2不可以访问Room中私有成员
10     Room *room;
11 };
12 class Room
13 {
14     friend void GoodFriend::visit();
15 public:
16     Room();
17 public:
18     string m_SittingRoom;//客厅
19 private:
20     string m_BedRoom;//卧室
21 };
22 Room::Room()//类外实现成员函数
23 {
24     m_SittingRoom = "客厅";
25     m_BedRoom = "卧室";
26 }
27 GoodFriend::GoodFriend()
28 {
29     room = new Room;
30 }
31 void GoodFriend::visit()
32 {
33     cout << "visit可以访问" << room->m_SittingRoom << endl;
34     cout << "visit可以访问" << room->m_BedRoom << endl;
35 }
36 void GoodFriend::visit2()
37 {
38     cout << "visit2可以访问" << room->m_SittingRoom << endl;
39     //cout << "visit2可以访问" << room->m_BedRoom << endl;
40 }
41 void test()
42 {
43     GoodFriend gf;
44     gf.visit();
45     gf.visit2();
46 }
47 int main()
48 {
49     test();
50     system("pause");
51     return 0;
52 }
复制代码

 

posted on   廿陆  阅读(4)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示