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 ...
随机推荐
- 【原创】Ingress-Nginx-Controller的Metrics监控源码改造简析
一.背景 目前我们的生产环境一层Nginx已经容器化部署,但是监控并不完善,我们期望其具有Ingress-Nginx-Controller组件上报监控的数据.这样可以建立请求全链路的监控大盘.有利于监 ...
- layui 列合并相同内容
table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ...
- CRM客户管理系统哪个好用
当企业管理者在进行CRM系统的选型时,面对搜索引擎上五花八门的结果和各式各样的广告,一定会有这样的疑惑:CRM客户管理系统到底哪个好用?抛开网上那些为了广告效果而"夸张"出的优点, ...
- 企业管理CRM不只是客户录入系统
企业在举办营销活动或者展会之后,将会收集到大量的客户信息,将这些信息有效地整理.完善.储存也是一个不小的工程.如果您的企业经常面遇到这样的情况,不妨使用Zoho CRM系统来帮您完成.但是,Zoho ...
- css实现文字过度变色效果
html: <div class="news text-center"> <a href="#"> <span>新</ ...
- Windows10:虚拟机开机导致win10黑屏、蓝屏
管理员身份打开cmd(命令提示符) 执行如下5个命令 netsh winsock reset net stop VMAuthdService net start VMAuthdService net ...
- Java线程池中的核心线程是如何被重复利用的?
真的!讲得太清楚了!https://blog.csdn.net/MingHuang2017/article/details/79571529 真的是解惑了 本文所说的"核心线程". ...
- vue(17)vue-route路由管理的安装与配置
介绍 Vue Router 是 Vue.js官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参 ...
- RabbitMQ 安装与界面管理
RabbitMQ 安装与界面管理 RabbitMQ概述 官网:https://www.rabbitmq.com/ RabbitMQ是部署最广泛的开源消息代理. RabbitMQ拥有成千上万的用户,是最 ...
- Django基础-02篇 Models的属性与字段
1.models字段类型 AutoField():一个IntegerField,根据可用ID自动递增.如果没指定主键,就创建它自动设置为主键. IntegerField():一个整数: FloatFi ...