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;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP通过session判断防止表单重复提交实例

PHP通过session判断防止表单重复提交实例 PHP通过session判断防止表单重复提交实例&#xff0c;当用户提交表单后&#xff0c;为防止重复操作&#xff0c;通过session来判断是否为初次提交&#xff0c;否则让他返回到之前表单页面。 当前表单页面is_submit设为0 1 SESSION_STAR…

用JAVA打开指定应用程序(软件),比如qq,浏览器

用JAVA打开指定应用程序(软件)&#xff0c;比如qq&#xff0c;浏览器。代码如下 public static void open(){if (java.awt.Desktop.isDesktopSupported()) {try {java.awt.Desktop dp java.awt.Desktop.getDesktop();if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {dp…

【HNOI】 lct tree-dp

【题目描述】给定2-3颗树&#xff0c;每个边的边权为1&#xff0c;解决以下独立的问题。 现在通过连接若干遍使得图为连通图&#xff0c;并且Σdis(x,y)最大&#xff0c;x&#xff0c;y只算一次。 每个点为黑点或者白点&#xff0c;现在需要删除一些边&#xff0c;使得图中的黑…

c++远征之模板篇——静态数据成员,静态成员函数

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、静态数据成员 &#xff08;1&#xff09;不同于普通的数据成员&#xff0c;静态数据成员在没有实例化时&#xff0c;它也是存在的&#xff08;即它是和类共存的&#xff09;&#xff1b; &…

shell脚本自动备份MySQL数据库

脚本如下&#xff1a; #!/bin/bash #数据库IP dbserver127.0.0.1 #数据库用户名 dbuserroot #数据密码 dbpasswd123456 #数据库,如有多个库用空格分开 dbnamebrdb_jtkg_0222 brdb_jtkg_0425 #备份时间 backtimedate %Y%m%d-%H-%M #备份输出日志路径 logpath/home/mysqlbackup/e…

摈弃 Windows 低效率的工作方式,发掘 Linux 身上的 UNIX 气质

[原文链接] 摈弃 Windows 低效率的工作方式&#xff0c;发掘 Linux 身上的 UNIX 气质 我已经半年没有使用 Windows 的方式工作了。Linux 高效的完成了我所有的工作。 GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务&#xff0c;打游戏&#xff0c;那么你也许不需要…

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

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

glClearDepth

opengl里面的深度缓存 在现实生活中&#xff0c;一个实心物体挡在另外一个实心物体的前面&#xff0c; 后面的那个物体有部分会被遮盖掉 那么opengl里面如何模拟这个情况呢&#xff1f; 每个物体的每个像素都有一个深度缓存的值&#xff08;在0到1之间&#xff0c;可以想象成是…

frp对http协议应用

前言 frp是一个开源的项目, 可用于内网穿透的高性能的反向代理应用&#xff0c;支持 tcp, udp 协议&#xff0c;为 http 和 https 应用协议提供了额外的能力&#xff0c;且尝试性支持了点对点穿透。 github地址&#xff1a;https://github.com/fatedier/frp 此处对http的应用做…

树形列(无限级联下拉列的曲线版本)

先上效果图&#xff1a; 1、列表 - 列表设置 - 创建栏&#xff0c;“类型”选择“托管元数据”&#xff0c;如下图&#xff1a; 2、选中“托管元数据”后&#xff0c;可以到下面编辑需要的树形啦&#xff1a; 3、编辑好&#xff0c;确定&#xff0c;搞定&#xff1b;可以到列表…

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

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 函数模板&#xff08;vs模板函数&#xff09; 1、为什么需要模板&#xff1f; 函数体相同&#xff0c;只是类型不一样而已。那么能否把数据的类型当做参数传递呢&#xff1f;肯定是可以的&#xff0…

国外知名的开源项目托管网站

国外知名的开源项目托管网站 托管站点Top20如下&#xff1a; 1. SourceForge SF为大家所熟知&#xff0c;开源项目的大本营&#xff0c;SF托管至少28万个开源项目&#xff0c;一天的下载量超过200万。 2. GitHub GitHub托管使用Git版本控制系统的公开和私有项目。 目前该网站托…

js初学总结

基础 交换变量方式 //利用第三方变量进行交换var num1 10;var num2 20;var temp;temp num1;num1 num2;num2 temp;console.log(num1);console.log(num2);//一般适用于数字交换var num1 10;var num2 20;num1 num1 num2;num2 num1 - num2;num1 num1 - num2;console.l…

js去空格函数(方法)

<script type"text/javascript"> //去左空格; function ltrim(s){ return s.replace(/(^\s*)/, ""); } //去右空格; function rtrim(s){ return s.replace(/(\s*$)/, ""); } //去左右空格; function trim…

c++远征之模板篇——标准模板库(STL)

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 常见的设计模板 1、vector&#xff0c;向量 &#xff08;1&#xff09;本质是对数组的封装&#xff1b; &#xff08;2&#xff09;能够在常数时间内完成读取&#xff1b; &#xff08;3&#xf…

避免Castle Windsor引起的内存泄露

原文地址&#xff1a; http://nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning-the-underlying-mechanics/CASTLE WINDSOR: AVOID MEMORY LEAKS BY LEARNING THE UNDERLYING MECHANICS Lifestyles In am not going to explain all the dif…

数据结构探险——队列篇

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、什么是队列&#xff1f; &#xff08;1&#xff09;先入先出的模型&#xff08;FIFO&#xff09;。 &#xff08;2&#xff09;队头&#xff0c;队尾。 &#xff08;3&#xff09;细分为普通队…

Linux系统时间和硬件时间设置

在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指主机板上的时钟设备&#xff0c;也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟&#xff0c;那么它们之间就会存在差异。当Li…

小程序购物车抛物线(贝塞尔曲线实现)

话不多说上代码https://developers.weixin.qq.com/s/U4SmwPmg7uaj 转载于:https://www.cnblogs.com/gkxNB/p/11400075.html

hdu2570 迷瘴

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2570 题目的意思&#xff1a;给你n个体积相同浓度不同的解药&#xff0c;让你配置出浓度不大于w的最大体积的解药&#xff1a; 解题过程:就是一个简单的排序加判断。弄了很久还是没有弄好&#xff0c;后来才发现…