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 ...
随机推荐
- Netty 框架学习 —— 预置的 ChannelHandler 和编解码器
Netty 为许多提供了许多预置的编解码器和处理器,几乎可以开箱即用,减少了在烦琐事务上话费的时间和精力 空闲的连接和超时 检测空闲连接以及超时对于释放资源来说至关重要,Netty 特地为它提供了几个 ...
- Unity il2cpp加密
防市面上百分之九十的破解者,下面是Mono改为il2cpp的面板 点击:File > BuildSettings > PlayerSettings > OtherSettings & ...
- UnityPlayerActivity删除后的后果
刚踩完这个坑,来说一下吧! 原因: 我因为前阵子学习了一下Unity Android交互,在这个过程中,我创建了类库,在类库里因为要用UnityPlayerActivity.java类所以便把Unit ...
- 什么是DDoS黑洞路由?
1. 什么是DDoS黑洞路由? DDoS黑洞路由/过滤(有时称为黑孔)是缓解DDoS攻击的一种对策,网络流量将被路由到"黑洞"中并且丢失.如果在没有特定限制条件下实施黑洞过滤,合法 ...
- hdu 1556 Color the ball 线段树 区间更新
水一下 #include <bits/stdc++.h> #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 ...
- Linux系统下安装MongoDB
下载安装包 去MongoDB官网https://www.mongodb.com/try/download/community,下载社区版的安装包: 我的Linux系统是CentOS 7.5版本的,通常 ...
- 包机制与javaDOC文档
包机制 包的本质就是个文件夹: 一般利用公司域名倒置作为包名:com.kuangstudy.biog javaDOC文档 package com.kuang.base; /** * @author K ...
- 第八章 - JUC
J.U.C AQS 原理 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状态(分独占模式和共享模式),子类需 ...
- yoyogo v1.7.5 发布, 独立依赖注入DI
YoyoGo v1.7.5 YoyoGo (Go语言框架) 一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s / ...
- C语言:预处理 编译过程分解 证明图