C++友元(Friend)简介
相对Java而言,友元是C++中特有的一种元素,再加上《C++ Primer》也并没有太具体的样例,所以刚接触这个概念的时候懵了非常久,即是自己总结一下,也希望能帮到大家,以下来讲讲友元的使用方法和一些注意的地方。
操作:
1)在MyFriend类中,将Father类定义成友元
2)写一个Son类继承自Father类
3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量
4)在MyFriend类的构造函数中创建Father对象。并定义其内部的三个变量
结果:
1)Father类中创建的MyFriend对象同意直接訪问MyFriend类中全部变量
2)Son类中创建的MyFriend对象仅仅同意直接訪问MyFriend类中Public变量
3)由第二点可知,友元关系无法继承
4)MyFriend类中创建的Father对象仅仅同意直接訪问Father类中的Public变量
5)由第四点可知,友元关系是单向的。即A为B友元,B并非A的友元。须要另外单独定义
MyFriend.h
#include "Father.h"
class MyFriend{
friend class Quote; //友元类直接这样定义就OK了
public:
MyFriend(){
Father *p = new Father();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
}
int var1;
protected:
int var2;
private:
int var3;
};
Father.h
#include "MyFriend.h"
class Father{
public:
Father(){
MyFriend *p = new MyFriend();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
};
int var1;
protected:
int var2;
private:
int var3;
}
Son.h
#include "MyFriend.h"
class Son : Father{
Son(){
MyFriend *p = new MyFriend();
p->var1 = 1;
p->var2 = 1;
p->var3 = 1;
};
}
C++友元(Friend)简介的更多相关文章
- InternalsVisibleToAttribute——把internal成员暴露给指定的友元程序集
友元程序集简介 我们知道一个类中被定义为internal的成员(包括类型.方法.属性.变量.事件)是只能在同一个程序集中被访问到的(当然了,我这里说的是正常的方式,不包括通过反射来访问).这个规则在. ...
- C++中友元简介
本文基于<C++ Primer(第五版)>,纯属个人笔记整理.若有错误欢迎大家留言指出. 一.为什么要用友元和其缺点? 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员 ...
- C++编程学习(九)this指针&友元函数
mooc西工大魏英老师的课程通道关闭了,难受.现在边看工程代码边重温刷第一遍C++时候的知识点,顺序没有按照大纲的来,想到哪写到哪. this是干啥用的? 简介:在 C++ 中,每一个对象都能通过 t ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
随机推荐
- Mysql学习总结(35)——Mysql两千万数据优化及迁移
最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...
- java中Collection 与Collections的区别
1. Collection是集合类的一个顶级接口,其直接继承接口有List与Set 而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及 ...
- 数据库-mongodb-聚合与map reduce
分组统计:group() 简单聚合:aggregate() 强大统计:mapReduce() Group函数: 1.不支持集群.分片,无法分布式计算 2.需要手写聚合函数的业务逻辑 curr指当前行, ...
- ASP.NET-viewBag Viewdata Tempdata
ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据. ViewData和ViewBag很相似,而TempData有 ...
- Linux 网络搭建
如果系统环境崩溃. 调用/usr/bin/vim /etc/profile Windows 1 本地连接使用固定IP vmware 8 2 修改Windows的hosts地址 ...
- OS - 线程和进程的差别
进程是资源分配的基本单位,又是调度执行的基本单位.比如.用户执行自己的程序,系统就创建一个进程.并为它分配资源,包含各种表.内存空间.磁盘空间.I/O设备等. 然后.把该进程放入进程的就绪队列.进程调 ...
- jquery outerHeight方法 outerWidth方法 获取元素实际宽度高度
曾经写代码中,每当须要获取元素的实际"宽度"(这里的宽度是指元素宽度加上其边距)时,都须要用元素宽度加上margin值才行,今天发现一个叫outerWidth(options)的方 ...
- thinkphp项目上传到github,为什么缺少很多文件
thinkphp项目上传到github,为什么缺少很多文件 问题: 把tp5项目push到码云(类似github)上,为什么没有thinkphp这个核心库? 然后我看了下码云和github上,官方的t ...
- Spark技术在京东智能供应链预测的应用——按照业务进行划分,然后利用scikit learn进行单机训练并预测
3.3 Spark在预测核心层的应用 我们使用Spark SQL和Spark RDD相结合的方式来编写程序,对于一般的数据处理,我们使用Spark的方式与其他无异,但是对于模型训练.预测这些需要调用算 ...
- Oracle11g数据库导入Oracle10g数据库操作笔记
一.在11g服务器上,使用expdp命令备份数据 EXPDP USERID='SYS/sys@daggis as sysdba' schemas=oa directory=DATA_PUMP_DIR ...