c++远征之模板篇——友元函数、友元类
以下内容源于慕课网的学习整理,如有侵权,请告知删除。
一、友元函数
1、分类
全局函数——》友元全局函数
成员函数——》友元成员函数
2、关键字friend
友元全局函数
- 如下,利用friend修饰的函数,其参数应该是本类的引用或者指针;
- 这里的printXY函数写在类的外面,即全局函数。
- 但是可以访问类的私有成员,因为用friend在类中声明了是友元函数。
友元成员函数
- 此时的printXY函数位于类Circle中。
- 此时的printXY可以访问Coordinate中的私有数据成员。
二、友元类
- 概念如下
- 此时可以在友元类Circle中定义一个Coordinate类,然后访问Coordinate的数据成员。
三、关于友元的注意事项
1、友元关系不可传递;
2、友元关系的单向性;
3、友元声明的形式及数量不受限制。(友元声明在类的哪里都可以)
4、友元只是封装的补充,是迫不得已的使用方法,可以通过设计的巧妙性,避免使用友元。它破坏了数据的封装。
四、代码示例
#include <iostream>
using namespace std;
class Watch;/*** 定义Time类* 数据成员:m_iHour, m_iMinute,m_iSecond * 成员函数:构造函数* 友元类:Watch*/
class Time
{// 友元类friend class Watch;
public:Time(int hour, int min, int sec){m_iHour = hour;m_iMinute = min;m_iSecond = sec;}
public:int m_iHour;int m_iMinute;int m_iSecond;
};/*** 定义Watch类* 数据成员:m_tTime* 成员函数:构造函数* display用于显示时间*/
class Watch
{
public:Watch(Time& temp):m_tTime(t){}void display(){cout << m_tTime.m_iHour << endl;cout << m_tTime.m_iMinute << endl;cout << m_tTime.m_iSecond << endl;}
public:Time m_tTime;
};int main()
{Time t(6, 30, 20);Watch w(t);w.display();return 0;
}
c++远征之模板篇——友元函数、友元类相关推荐
- 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器
1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- 10-C++远征之模板篇-学习笔记
C++远征之模板篇 本文及代码收录于个人编程笔记(整理中,欢迎Star): https://github.com/mtianyan/Programming-Notebook 将会学到的内容: 模板函数 ...
- 友元函数 友元类 友元成员函数
友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术--友元(friend),即在声明前添加关键字friend. 友元关系是单向 ...
- C++笔记 友元函数 友元类
友元函数 :友元函数是可以直接访问类的私有成员的非成员函数. 它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: ...
- c++远征之模板篇——函数模板、类模板
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 函数模板(vs模板函数) 1.为什么需要模板? 函数体相同,只是类型不一样而已. 那么能否把数据的类型当做参数传递呢?肯定是可以的,这是模板. 2 ...
- 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )
文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...
- 友元函数、类的非静态成员函数、静态成员函数的区别
类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...
- c++远征之模板篇——运算符重载
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.运算符重载的概念 给原有的运算符赋予新的功能. 比如下面的截图,本来加号+并不具备坐标的相加的功能,但是通过运算符重载可以实现该功能. 二.运 ...
- c++ 友元函数,友元类
友元函数破坏了类的封装特性,它可以在类的外部访问类的私有属性 #include "iostream" using namespace std; class A1 { public: ...
最新文章
- SLAM本质剖析-Open3D
- sqlserver中判断表或临时表是否存在
- 美媒:中国大陆最火的工作,教人工智能识图
- svn的安装和服务器搭建, 汉化以及多项目管理
- 210108阶段三进程管理,多进程编程
- [转]关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析
- java swarm集群_52个Java程序员不可或缺的 Docker 工具
- SpringCloud 微服务网关Gateway介绍及简单路由配置
- python 字典技巧
- python变量类型声明_python基础知识:变量的定义以及类型
- 一种APP和微信远程组态监控台达PLC的方案
- Wordpress世界最牛?做网站用国内cms建站系统才是正道
- 韩剧Search[1992-2005]
- 使用二维码解决固定资产管理的难题
- 图灵专访:郭霖的成长之路
- grep 命令使用(2)
- OpenCV总结6——stitcher
- swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究
- sonar覆盖率、代码覆盖率、分支覆盖率的计算方式
- 【SLAM编译错误】CMakeFiles/Makefile2:252: recipe for target 'CMakeFiles/stereo_kitti.dir/all' failed
热门文章
- Laravel 使用 Aliyun OSS 云存储
- 如何使用postman做接口测试
- SortedDictionaryTKey,TValue正序与反序排序及Dicttionary相关
- jQuery --- grep
- 利用SVD-推荐未尝过的菜肴2
- std::shared_ptr之deleter的巧妙应用
- Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
- 手机屏幕适配原理及实现
- LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份
- java 基本功 —— 内存相关