以下内容源于慕课网的学习整理,如有侵权,请告知删除。

一、友元函数

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. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  2. 10-C++远征之模板篇-学习笔记

    C++远征之模板篇 本文及代码收录于个人编程笔记(整理中,欢迎Star): https://github.com/mtianyan/Programming-Notebook 将会学到的内容: 模板函数 ...

  3. 友元函数 友元类 友元成员函数

    友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术--友元(friend),即在声明前添加关键字friend. 友元关系是单向 ...

  4. C++笔记 友元函数 友元类

    友元函数 :友元函数是可以直接访问类的私有成员的非成员函数. 它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:     ...

  5. c++远征之模板篇——函数模板、类模板

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 函数模板(vs模板函数) 1.为什么需要模板? 函数体相同,只是类型不一样而已. 那么能否把数据的类型当做参数传递呢?肯定是可以的,这是模板. 2 ...

  6. 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...

  7. 友元函数、类的非静态成员函数、静态成员函数的区别

    类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...

  8. c++远征之模板篇——运算符重载

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.运算符重载的概念 给原有的运算符赋予新的功能. 比如下面的截图,本来加号+并不具备坐标的相加的功能,但是通过运算符重载可以实现该功能. 二.运 ...

  9. c++ 友元函数,友元类

    友元函数破坏了类的封装特性,它可以在类的外部访问类的私有属性 #include "iostream" using namespace std; class A1 { public: ...

最新文章

  1. SLAM本质剖析-Open3D
  2. sqlserver中判断表或临时表是否存在
  3. 美媒:中国大陆最火的工作,教人工智能识图
  4. svn的安装和服务器搭建, 汉化以及多项目管理
  5. 210108阶段三进程管理,多进程编程
  6. [转]关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析
  7. java swarm集群_52个Java程序员不可或缺的 Docker 工具
  8. SpringCloud 微服务网关Gateway介绍及简单路由配置
  9. python 字典技巧
  10. python变量类型声明_python基础知识:变量的定义以及类型
  11. 一种APP和微信远程组态监控台达PLC的方案
  12. Wordpress世界最牛?做网站用国内cms建站系统才是正道
  13. 韩剧Search[1992-2005]
  14. 使用二维码解决固定资产管理的难题
  15. 图灵专访:郭霖的成长之路
  16. grep 命令使用(2)
  17. OpenCV总结6——stitcher
  18. swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究
  19. sonar覆盖率、代码覆盖率、分支覆盖率的计算方式
  20. 【SLAM编译错误】CMakeFiles/Makefile2:252: recipe for target 'CMakeFiles/stereo_kitti.dir/all' failed

热门文章

  1. Laravel 使用 Aliyun OSS 云存储
  2. 如何使用postman做接口测试
  3. SortedDictionaryTKey,TValue正序与反序排序及Dicttionary相关
  4. jQuery --- grep
  5. 利用SVD-推荐未尝过的菜肴2
  6. std::shared_ptr之deleter的巧妙应用
  7. Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
  8. 手机屏幕适配原理及实现
  9. LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份
  10. java 基本功 —— 内存相关