C++学习(11)—— 友元
生活中你的家有客厅(Public),有你的卧室(Private)
客厅所有来的客人都可以过去,但是你的卧室是私有的,也就是说只有你能进去
但是呢,你也可以允许你的好闺蜜好基友进去
在程序里,有些私有属性也想让类外特殊的一些函数或类进行访问,就需要用到友元的技术
- 友元的目的就是让一个函数或者类访问另一个类中的私有成员
- 友元的关键字为 friend
友元的三种实现:
- 全局函数做友元
- 类做友元
- 成员函数做友元
1. 全局函数做友元
friend void goodGay(Building *building);
#include <iostream>
#include <string>
using namespace std;
class Building{
//告诉编译器goodGay全局函数是Building好朋友,可以访问Building中的私有成员
friend void goodGay(Building *building);
public:
Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
//全局函数
void goodGay(Building *building){
cout << "好基友的全局函数 正在访问:" << building->m_SittingRoom << endl;
cout << "好基友的全局函数 正在访问:" << building->m_BedRoom << endl;
}
void test01(){
Building building;
goodGay(&building);
}
int main(){
test01();
return 0;
}
2. 类做友元
friend class GoodGay;
#include <iostream>
#include <string>
using namespace std;
class Building{
friend class GoodGay;
public:
Building();
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
class GoodGay{
public:
GoodGay();
void visit(); //参观函数,访问Building中的属性
Building *building;
};
//类外写成员函数
Building::Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
GoodGay::GoodGay(){
//创建建筑物对象
building = new Building;
}
void GoodGay::visit(){
cout << "好基友正在访问:" << building->m_SittingRoom << endl;
cout << "好基友正在访问:" << building->m_BedRoom << endl;
}
void test01(){
GoodGay gg;
gg.visit();
}
int main(){
test01();
return 0;
}
3. 成员函数做友元
friend void GoodGay::visit();
#include <iostream>
#include <string>
using namespace std;
class Building;
class GoodGay{
public:
GoodGay();
void visit(); //让visit函数可以访问Building中私有成员
void visit2(); //让visit2函数不可以访问Building中私有成员
Building *building;
};
class Building{
friend void GoodGay::visit();
public:
Building();
string m_SittingRoom; //客厅
private:
string m_BedRoom; //卧室
};
//类外写成员函数
Building::Building(){
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
GoodGay::GoodGay(){
//创建建筑物对象
building = new Building;
}
void GoodGay::visit(){
cout << "visit正在访问:" << building->m_SittingRoom << endl;
cout << "visit正在访问:" << building->m_BedRoom << endl;
}
void GoodGay::visit2(){
cout << "visit2正在访问:" << building->m_SittingRoom << endl;
//cout << "visit2正在访问:" << building->m_BedRoom << endl;
}
void test01(){
GoodGay gg;
gg.visit();
gg.visit2();
}
int main(){
test01();
return 0;
}
C++学习(11)—— 友元的更多相关文章
- JavaScript学习11 数组排序实例
JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...
- C++学习之友元类和友元函数
C++学习之友元类和友元函数 模板类声明也可以有友元,模板的友元可以分为以下几类: 1.非模板友元: 2.约束模板友元,即就是友元的类型取决于类被实例化的时候的 ...
- ThinkPhp学习11
原文:ThinkPhp学习11 一.模板的使用 (重点) a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和模块名同名的文件夹[Index]/和方法名同名的文件[i ...
- c++学习之友元
最近工作好累呀,晚上总是失眠,自学c++的步骤都放慢了,本来之前看c++ primer的,结果这本书讲的太细节了,初学者不是很好把握.所以我又重新找了个教程,比较适合初学者.今天学习到友元函数和友元类 ...
- C++学习12 友元函数和友元类
友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有 ...
- 【Spark深入学习-11】Spark基本概念和运行模式
----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 ...
- springboot实战(汪云飞)学习-1-1
java EE开发的颠覆者 spring boot 实战 随书学习-1 1.学习案例都是maven项目,首先要在eclipse 中配置 maven,主要修改maven的配置文件:配置文件下载链接: h ...
- django学习-11.开发一个简单的醉得意菜单和人均支付金额查询页面
1.前言 刚好最近跟技术部门的[产品人员+UI人员+测试人员],组成了一桌可以去公司楼下醉得意餐厅吃饭的小team. 所以为了实现这些主要点餐功能: 提高每天中午点餐效率,把点餐时间由20分钟优化为1 ...
- python爬虫学习(11) —— 也写个AC自动机
0. 写在前面 本文记录了一个AC自动机的诞生! 之前看过有人用C++写过AC自动机,也有用C#写的,还有一个用nodejs写的.. C# 逆袭--自制日刷千题的AC自动机攻克HDU OJ HDU 自 ...
- ExtJS4.2学习(11)可拖放的表格(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-18/180.html --------------- ...
随机推荐
- Salesforce 开发整理(四)记录锁定
如果一个对象的记录在满足某个条件的情况下,希望能对其进行锁定,即普通用户没有权限对其进行编辑操作,记录页面显示如下图 一般会在提交审批,或者项目进行到某个阶段的情况下,由后台进行判断要不要锁定记录,或 ...
- 【技术博客】nginx服务器的https协议实现
在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...
- C# IE浏览器操作类
using System; using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropSe ...
- 【2019年05月21日】A股ROE最高排名
个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名. 兰州民百(SH600738) - 滚动ROE:86.45% - 滚 ...
- cad.net 读取pc3,pmp 读取pc3打印机文件
修改pc3文件还没做好..大家先look look怎么读.... 首先弄一个控制台程序, 然后去下载 Ionic.Zip 这个东西...载到控制台...都很简单... 然后就是复制下面代码,看控制台显 ...
- 自定义Yaml解析器替换Properties文件
自定义Yaml解析器替换Properties文件 项目结构 案例代码 配置类SpringConfiguration @Configuration @Import(JdbcCofnig.class) @ ...
- storm并行
Storm并行度 wordcount 统计job代码 public class WordCountTopology { private static final String SENTENCE_SPO ...
- 027 ElasticSearch----全文检索技术02---快速入门
1.基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的. 注意:6.0之前的版本有type(类型)概念,type相当于关系数据库的表,E ...
- Effective.Java第67-77条(异常相关)
67. 明智审慎地进行优化 有三条优化的格言是每个人都应该知道的: (1)比起其他任何单一的原因(包括盲目的愚钝),很多计算上的过失都被归咎于效率(不一定能实现) (2)不要去计算效率上的一些小小的 ...
- 当Windows操作系统关机时,不会执行Windows Service的OnStop方法(转载)
Windows Service OnStop when computer shutdown 问: I'm writing a Windows Service in C#. I want to take ...