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++ 友元 (全局函数做友元) (类做友元) (成员函数做友元)的更多相关文章

  1. c++友元函数、友元类、友成员函数

    友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员. class Point{ public: friend void fun(Point t);//友元函数 private: int ...

  2. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  3. C++(十六) — 类中引用成员函数、命名空间的使用

    1.为什么类中引用成员函数? 类将属性和方法做了封装.类是一种数据类型,也就是:固定大小内存块的别名. 类的定义是一个抽象的概念,定义时不分配内存,当用类定义对象时,才分配一个固定大小的内存块. 此时 ...

  4. 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)

    本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上?             成员函数可以被看作是类 ...

  5. CDocument类的UpdateAllViews()成员函数

    (一)UpdateAllViews() 与 Invalidate()的区别 UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系 ...

  6. VC6.0中重载操作符函数无法访问类的私有成员

    整理日: 2015年03月18日 在 C++ 中,操作符(运算符)可以被重载以改写其实际操作.同时我们可以定义一个函数为类的朋友函数(friend function)以便使得这个函数能够访问类的私有成 ...

  7. C++类的const成员函数、默认的构造函数、复制形参调用函数(转)

    C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...

  8. C++模板编程中只特化模板类的一个成员函数

    模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...

  9. 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)

    假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...

  10. 对类中的成员函数的定义和声明最后添加一个const是什么意思?

    1.const修饰的成员函数只能调用const修饰的成员函数,且不能修改数据成员变量的值. 2.const修饰的类对象只能调用const修饰的成员函数. 3.const修饰的类对象可以调用非const ...

随机推荐

  1. Redis之复制

    1.配置 1.1 建立复制 参与复制的Redis实例划分为主节点(master) 和从节点(slave).默认情况下,Redis都是主节点.每个从节点只能有一个主节点,而主节点可以同时具有多个从节点. ...

  2. css input 设置只读样式

    input[readonly]{ background-color: #EEEEEE !important; }

  3. 接口自动化框架搭建Unittes+HTMLTestRunner

    本次主要尝试搭建接口自动化框架,基于 unittest+HTMLTestRunner 框架主要模块: config: 存放配置文件 lib: 封装了一些接口前置函数:处理各种事物 log: 存放生成的 ...

  4. Centos中安装Node.Js

    NodeJs安装有好几种方式: 第一种: 最简单的是用yum命令,可惜我现在用的时候 发现 镜像中没有nodejs:所以这种方式放弃: 第二种:去官网下载源码,然后自己编译:编译过程中可能会出现问题, ...

  5. 递推算法,AI衍生

    引言 最近在刷leetcode算法题的时候,51题很有意思: 题目是这样的: n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击.给你一个整数 n ,返回 ...

  6. Linux sudo命令——sudoers文件的配置

    Linux sudo命令与其配置文件/etc/sudoers   对linux有一定了解的人多少也会知道点关于sudo命令.sudo命令核心思想是权限的赋予 ,即某个命令的所属用户不是你自己,而你却有 ...

  7. 「CF446C」 DZY Loves Fibonacci Numbers

    「CF446C」 DZY Loves Fibonacci Numbers 这里提供一种优美的根号分治做法. 首先,我们考虑一种不太一样的暴力.对于一个区间加斐波那契数的操作 \([a,b]\),以及一 ...

  8. 关于Hadoop调优

    Hadoop生产调优 一.HDFS-核心参数 1.NameNode 内存生产配置 1) NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块 ...

  9. 手写笔记变PDF-几行代码变命令行程序为图形化界面

    前言 最近发现了一个非常不错的Python类库----Gooey, https://github.com/chriskiehl/Gooey 在它的帮助下我们可以非常方便的将一个命令行程序升级成一个图形 ...

  10. AI 预测蛋白质结构「GitHub 热点速览 v.21.29」

    作者:HelloGitHub-小鱼干 虽然 AI 领域藏龙卧虎,但是本周预测蛋白质结构的 alphafold 一开源出来就刷爆了朋友圈,虽然项目与我无关,但是看着科技进步能探寻到生命机理,吃瓜群众也有 ...