vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元

d8b468e89669ef28e11168ecafbfb721.png

18.类中重载运算符与友元

上次节中学习了如何在类中重新定义赋值(=)运算符,实际上在一个自定义类中除了赋值(=)运算符外,类的对象是不可以直接使用运算符的,比如你在main函数中写这样的代码会报错:

257d9e55c890f0e3e80ffc05c71aa7cd.png

如果想解决这些报错问题,需要在类中重载这些运算符。

18.1 重载

在表达式中使用

首先在类中声明要重载的运算符:< ,然后去函数中实现具体的比较规则。

4ef5ce14f4b22037028d7c25200544d2.png

声明重载运算符函数的代码要求按照固定的格式:必须在运算符

18.2 重载+运算符

如同上面的

9d8dbe75ea1fa788dfa452756d4ec62f.png

18.3 重载<>运算符

之前我们可以使用C++ 的流提取运算符 >> 和流插入运算符 << 来输入和输出内置的一些数据类型,实际上我们也可以重载流提取运算符和流插入运算符来操作自定义的数据类型。

在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数了。

fa358dd5a92d79d8ae832144d3300dc9.png
5630efda492f6c392f55eb774c2ce269.png

重载运算符之后,在main函数中直接通过cout输出对象的数据,或cin输入对象的数据。

d536b83fd856a8092679970b80e8ab26.png

18.4 友元函数

类的private的成员只有类的成员函数才有权直接访问,外部函数无访问权限。但是类中有一种特殊的函数——友元函数,有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数在类的定义中出现过,但友元函数并不是类的成员函数。

如果要声明一个函数为类的友元函数,需要在类定义中使用关键字 friend,函数的参数必须有一个类对象参数,因为只有通过对象才能访问私有或保护的成员:

3e36de0cd4f04af7d5fde6316ed8c7bc.png

18.5 友元类

友元也可以是一个类,该类被称为友元类。如果声明一个类为友元,那整个友元类的所有成员都是这个类的友元。

如果要声明友元类,需要在类定义中使用关键字 friend,如下所示:

124973a2b55d2e4052665e9e0b6fed56.png

友元类的任何成员函数都可以访问类的成员。

3cc4a4bbc02bb4055f73c9390fd157e4.png

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

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

相关文章

Django REST framework 视图

上一部分代码在序列化部分 类继承顺序 ############### mixins.py ################ # 类中调用的方法均在 GenericAPIView 类中实现&#xff0c;所以下列类需要结合 GenericAPIView 使用 class ListModelMixin(object) # 查看继承类def list(self, reque…

IOS7.1.1真的像网上流传的那么好?没有任何问题么??

IOS7.1.1推送更新之后到处看到网上说711好的~~ 那么IOS7.1.1真的像网上现在流传的那么好么&#xff1f; 其实不然&#xff0c;IOS7.1.1目前众多网友反映说升级ios7.1.1之后APPstore连接不上了&#xff0c;提示无法连接到APPstore。 这个问题也不难解决~还是之前的老办法~ 那么今…

三校生计算机对口本科有哪些学校,宝山三校生五月对口高考报名

多次复习生活不可能像你想象得那么好&#xff0c;但也不会像你想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。多种方式结合起来复习单一的复习方法&#xff0c;易产生消极情绪和疲劳&#xff0c;如果采用交谈复习法、讨论复习法、自我检查复习法多样化的复习方法&#…

localhost 已拒绝连接_【Python】MongoDB数据库的连接和操作

安装Python 要连接 MongoDB 需要 MongoDB 驱动。pip安装&#xff1a;python3 -m pip3 install pymongo创建数据库import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)

一、出现的问题及解决方法&#xff1a; 今天在写一个table相关插件的时候无意中发现了这样一个问题&#xff0c;记得以前在写这种控制checkbox选中与非选中的代码时并没有这种bug&#xff0c;当时也是用的checked属性&#xff0c;而现在却行不通了。 于是乎做了以下测试&#x…

Django REST framework 认证、权限和频率组件

认证与权限频率组件 身份验证是将传入请求与一组标识凭据&#xff08;例如请求来自的用户或其签名的令牌&#xff09;相关联的机制。然后 权限 和 限制 组件决定是否拒绝这个请求。 简单来说就是&#xff1a; 认证确定了你是谁权限确定你能不能访问某个接口限制确定你访问某…

高速率AVS整数变换的汇编实现与优化

1 引言 AVS标准Ⅲ采用的8x8整数变换在获得较H&#xff0e;264更高的压缩率和主观图像质量的同时&#xff0c;增加了算法的实现复杂性和时间开销。本文重点研究AVS编解码器的整数变换模块&#xff0c;针对不同的算法实现模式&#xff0c;在原有Visual C6&#xff0e;0整数变换模…

解析H.264视频编解码DSP实现与优化

引言 基于互联网的数字视频产业前景看好&#xff0c;而3G的规模部署&#xff0c;也会推动移动视频通信成为现实。但数字化后的视频图像具有数据海量性&#xff0c;给图像的存储和传输造成较大的困难。数字视频产业&#xff0c;是指数字内容中以数字视频形态为主的文化创意和传播…

python 打包exe_python如何封装为exe

1、首先进入python安装路径D:\Python27\Scripts下&#xff0c;查看pip或easy_install是否安装。2、确保安装了pip或者easy_install&#xff0c;在cmd命令行下输入“easy_install”&#xff0c;没有提示“xxx不是内部或外部命令……”&#xff0c;就说明easy install工具安装成功…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服务端接收客户端传过来的数据&#xff0c;把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。 在了解解析器之前&#xff0c;我们要先知道Accept以及ContentType请求头。 Accept是告诉对方我能解析什么样的数据&#xff0c…

MyBatis的学习之路(二)

上篇文章介绍了MyBatis的配置文件&#xff0c;现在来介绍实体映射文件Mapper.xml。 说道实体映射文件&#xff0c;就不得不说一下实体与表之间的映射关系&#xff1a;单表映射和多表映射。 a. 单表映射 1 public class Admin{ 2 private String id; 3 private String n…

python爬取toefl_spark学习进度6-Python爬取数据的四个简单实例

今天本来想把昨天安装的intellij配置好&#xff0c;但是一直显示没有网络&#xff0c;网上查了相关资料也没有查出来解决办法。然后暂停了intellij的配置&#xff0c;开始做了几个Python爬取简单数据的实例&#xff0c;先做了几个最简单的&#xff0c;以后再加大难度&#xff0…

Django REST framework 版本

API 版本控制允许我们在不同的客户端之间更改行为&#xff08;同一个接口的不同版本会返回不同的数据&#xff09;。 DRF提供了许多不同的版本控制方案。 可能会有一些客户端因为某些原因不再维护了&#xff0c;但是我们后端的接口还要不断的更新迭代&#xff0c;这个时候通过…

AngularJS中的过滤器(filter)

AngularJS中的过滤器是用于对数据的格式化&#xff0c;或者筛选的函数&#xff0c;可以直接通过以下语法使用&#xff1a; {{expression|filter}} {{expression|filter1|filter2}} {{expression|filter1:param1,param2,...|filter2} 过滤器的种类有number&#xff0c;currency&…

计算机考试上传照片教程,电脑照片传到iPhone手机的详细步骤【图文】

苹果自带的iOS系统是不可以随便和电脑进行数据交换的&#xff0c;必须使用iTunes软件。许多用户为此问题困扰&#xff0c;我们有什么可以把电脑照片传到iPhone手机&#xff1f;下面我们就一起来看看把电脑照片传到iphone设备的详细步骤。具体方法如下&#xff1a;1&#xff0c;…

Mware HA实战攻略之五VMwareHA测试验收

【IT168 专稿】在上一篇"VMware HA实战攻略之四VMwareHA安装及配置"中&#xff08;点击&#xff09;&#xff0c;讲述了VMwareHA的概念及创建过程&#xff0c;还讲述了创建过程中要注意的一些事项。在本篇中&#xff0c;将要讲述如何在群集节点之一的ESX主机上安装虚…

AVS解码器在DSP平台上的优化

AVS( Audio Video Coding STandard)是由我国数字 音视频标准工作组制定的具有自主知识产权的第二代音视频压缩准。AVS实行1 元专利费用的原则&#xff0c;相比其它音视频编解码标准具有编码效率高、专利费用低、授权模式简单等优势。AVS 解码器的结构复杂、运算量较大&#xff…

如何重做计算机系统软件,电脑卡如何一键重做Win7旗舰版

电脑卡如何一键重做Win7旗舰版&#xff1f;小伙伴们在使用电脑的过程中系统会越来越卡&#xff0c;对于新手小白来说怎么重装系统是一个比较烦恼的问题&#xff0c;不知道如何下手&#xff0c;从哪里开始&#xff0c;那么接下来就以云骑士装机大师为例给小伙伴们讲解一下电脑卡…

python去停用词用nltk_【NLTK】安装和使用NLTK分词和去停词

黄聪&#xff1a;PythonNLTK自然语言处理学习&#xff08;一&#xff09;&#xff1a;环境搭建 http://www.cnblogs.com/huangcong/archive/2011/08/29/2157437.html 安装NLTK可能出现的问题&#xff1a; 1. pip install ntlk 2. 如果遇到缺少stopwords报错如下&#xff1a;&am…

JavaScript知识概要

JavaScript 1.简介 JavaScript简介&#xff1a; JS是运行在浏览器端的一门脚本语言&#xff0c;一开始主要用来做浏览器验证&#xff0c;但现在功能已经不止于此。 所谓脚本语言就是指&#xff0c;代码不需要编译&#xff0c;直接运行&#xff0c;并且读入…