C++ 友元 (全局函数做友元) (类做友元) (成员函数做友元)
1 //友元 全局函数做友元
2 /*
3 #include <iostream>
4 #include <string>
5 using namespace std;
6
7 //建筑物类
8 class Building
9 {
10
11 //GoodGay全局函数 是 Building好朋友 可以访问 Building中私有成员
12 friend void GoodGay(Building& building);
13
14 public:
15 Building() //构造函数 赋初值
16 {
17 m_SittingRoom = "客厅";
18 m_BedRoom = "卧室";
19 }
20
21 public:
22 string m_SittingRoom; //客厅
23
24 private:
25 string m_BedRoom; //卧室
26 };
27
28 //全局函数
29 void GoodGay(Building &building)
30 {
31 cout << "好基友全局函数 正在访问 :" << building.m_SittingRoom << endl;
32
33
34 cout << "好基友全局函数 正在访问 :" << building.m_BedRoom << endl;
35
36 }
37
38 void test01()
39 {
40 Building building; //实例化
41 GoodGay(building);
42 }
43 int main()
44 {
45 test01();
46 }
47 */
48
49
50
51 //类做友元
52 /*
53 #include <iostream>
54 #include <string>
55 using namespace std;
56
57 class Building;
58
59 class GoodGay
60 {
61 public:
62 GoodGay();
63
64 void visit(); //参观函数 访问 Building中的熟悉
65
66 Building* building;
67 };
68
69 class Building
70 {
71
72 //goodgay类是Building 的好朋友 可以访问本类中的私有成员
73 friend class GoodGay;
74
75 public:
76 Building();
77
78 public:
79 string m_SittingRoom; //客厅
80
81
82 private:
83 string m_BedRoom; //卧室
84
85 };
86
87 //类外去写成员函数
88 Building::Building()
89 {
90 m_SittingRoom = "客厅";
91 m_BedRoom = "卧室";
92 }
93 GoodGay::GoodGay()
94 {
95 //创建建筑物对象
96 building = new Building;
97
98 }
99 void GoodGay:: visit()
100 {
101 cout << "好基友类正在访问 :" << building->m_SittingRoom << endl;
102
103 cout << "好基友类正在访问 :" << building->m_BedRoom << endl;
104 }
105
106 void test01()
107 {
108 GoodGay gg;
109 gg.visit();
110 }
111 int main()
112 {
113 test01();
114 }
115 */
116
117
118
119 //成员函数做友元
120 /*
121 #include <iostream>
122 #include <string>
123 using namespace std;
124
125 class Building;
126 class GoodGay
127 {
128 public:
129
130 GoodGay();
131
132
133
134 //让visit 函数可以访问Building中私有成员
135 void visit();
136
137 //让visi2函数 不可以访问Building中私有成员
138 void visit2();
139
140 Building* building;
141
142
143
144 };
145
146 class Building
147 {
148 //告诉编译器 GoodGay类下的visit 成员函数作为本类的好朋友
149 //可以访问私有成员
150
151 friend void GoodGay:: visit();
152
153 public:
154
155 Building();
156
157 public:
158
159 string m_SittingRoom; //客厅
160
161 private:
162
163 string m_BedRoom; //卧室
164 };
165
166 //类外实现函数初始化
167 Building::Building()
168 {
169 m_SittingRoom = "客厅";
170 m_BedRoom = "卧室";
171 }
172 GoodGay::GoodGay()
173 {
174 building = new Building;
175 }
176
177 //让visit 函数可以访问Building中私有成员
178 void GoodGay:: visit()
179 {
180 cout << "visit 函数 正在访问 : " << building->m_SittingRoom << endl;
181
182 cout << "visit 函数 正在访问 : " << building->m_BedRoom << endl;
183 }
184
185 //让visi2函数 不可以访问Building中私有成员
186 void GoodGay:: visit2()
187 {
188 cout << "visit2 函数 正在访问 : " << building->m_SittingRoom << endl;
189
190 //cout << "visit 函数 正在访问 : " << building->m_BedRoom << endl;
191
192 }
193
194 void test01()
195 {
196 GoodGay gg;
197 gg.visit();
198 gg.visit2();
199 }
200
201 int main()
202 {
203 test01();
204 }
205 */
C++ 友元 (全局函数做友元) (类做友元) (成员函数做友元)的更多相关文章
- c++友元函数、友元类、友成员函数
友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员. class Point{ public: friend void fun(Point t);//友元函数 private: int ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- C++(十六) — 类中引用成员函数、命名空间的使用
1.为什么类中引用成员函数? 类将属性和方法做了封装.类是一种数据类型,也就是:固定大小内存块的别名. 类的定义是一个抽象的概念,定义时不分配内存,当用类定义对象时,才分配一个固定大小的内存块. 此时 ...
- 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)
本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上? 成员函数可以被看作是类 ...
- CDocument类的UpdateAllViews()成员函数
(一)UpdateAllViews() 与 Invalidate()的区别 UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系 ...
- VC6.0中重载操作符函数无法访问类的私有成员
整理日: 2015年03月18日 在 C++ 中,操作符(运算符)可以被重载以改写其实际操作.同时我们可以定义一个函数为类的朋友函数(friend function)以便使得这个函数能够访问类的私有成 ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- C++模板编程中只特化模板类的一个成员函数
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...
- 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)
假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...
- 对类中的成员函数的定义和声明最后添加一个const是什么意思?
1.const修饰的成员函数只能调用const修饰的成员函数,且不能修改数据成员变量的值. 2.const修饰的类对象只能调用const修饰的成员函数. 3.const修饰的类对象可以调用非const ...
随机推荐
- python基本函数增删改排序,用range()求和
a=["blue","red","brack"] print(len(a))#列表长度 a.append("yellow" ...
- Windows10上开启WSL2(Windows Subsystem for Linux 2)及Docker Desktop For Windows
什么是WSL2 WSL2(Windows Subsystem for Linux 2)是适用于Linux的Windows子系统体系结构的一个新版本,它支持适用于Linux的Windows子系统在Win ...
- 103、kickstart自动化安装操作系统
103.1.前言: 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的办法有: 光盘安装系统===>一个 ...
- 9.5、zabbix高级操作(2)
4.zabbix的分布式监控: 使用zabbix-proxy主动方式(被动也可),使用zabbix-agent的主动方式(被动也可): Zabbix Server <- Zabbix Proxy ...
- [Linux]Ansible自动化运维① - 入门知识
目录 一.Ansible 概述 1.1 Ansible 是什么 1.2 Ansible 优势 1.3 Ansible 特性 二.Ansible 入门 2.1 Ansible 架构 2.2 Ansibl ...
- Solon 1.5.11 发布,增加国际化插件
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- Python小白的数学建模课-B5. 新冠疫情 SEIR模型
传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. 考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫的传染病. 本 ...
- Mybatis学习(1)开发环境搭建
什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML ...
- Maven | 把jar包安装到本地仓库
使用的场景 自己写的工具类想安装到本地 从Maven仓库中下载不下来的jar 使用的步骤 首先要保证自己的Maven配置全局环境变量,如果没有配置过maven全局变量,可以按照下面的步骤配置一下: 先 ...
- Codeforces Round #139 (Div. 2) 题解
vp上古场次ing CF225A Dice Tower 1.题目简述: 有 \(n\) 个骰子被叠在了一起.对于每个骰子上的一个数,与它对面的数的和始终为 \(7\) . 你是小明,你只能从正面看这个 ...