C++ prime 第五版 第14章 重载运算与类型转换

c++ primer 第14章 习题解答 14.1节 14.1答 不同点: 重载操作符必须具有至少一个class或枚举类型的操作数。 重载操作符不保证操作数的求值顺序,例如对&&和| | 的重载版本不再具有“短路求值”的特征,两个操作数,两个操作数都要进行求值,而且不规定操作数的求值顺序。 相同点: 对于优先级和结合性及操作数的数目都不变。 14.2 答: 文件sales_data.cc #include <iostream> #include <string> #i... 阅读详情
一、基本概念

重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的运算符也包含返回类型、参数列表以及函数体。

我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说,它或者说类的成员,或者至少含有一个类类型的参数。

直接调用一个重载的运算符函数

某些运算符不应该被重载

使用与内置类型一致的含义
选择作为成员或者非成员

二、输入和输出运算符

IO标准库分别使用>>和<<执行输入和输出操作。对这两个运算符来说,IO库定义了用其读写内置类型的版本,而类则需要自定义适合其对象的新版本以支持IO操作。

1. 重载输出运算符<<

通常情况下,输出运算符的第一个形参是一个非常量ostream对象的引用。第二个形参一般来说是一个常量的引用,该常量是我们想要打印的类类型。第二个形参是引用的原因是我们希望复制实参;而之所以该形参可以设常量是因为(通常情况下)打印对象不会改变对象的内容。

为了与其他输出运算符保持一致,operator<<一般要返回它的ostream形参。

输出运算符尽量减少格式化操作

输入输出运算符必须是非成员函数

如果我们希望为类自定义IO运算符,则必须将其定义成非成员函数。IO运算符通常需要读写类的非公有数据成员,所以IO运算符一般被声明为友元。

2. 重载输入运算符 >>

通常情况下,输入运算符的第一个形参是运算符将要读取的流的引用,第二个形参是将要读入到的(非常量)对象的引用。该运算符通常会返回某个给定流的引用。第二个形参之所以必须是个非常量是因为输入运算符本身的目的就是将数据读入到这个对象中。

三、 算术和关系运算符

通常情况下,我们把算数和关系运算符定义为非成员函数以允许对左侧或右侧的运算对象进行转换。形参是常量的引用。

1. 相等运算符

2. 关系运算符

四、赋值运算符

五、下标运算符

表示容器的类通常可以通过元素在容器中的位置访问元素,这些类一般会定义下标运算符 operator[ ]。

下标运算符必须是成员函数。

六、递增和递减运算符

定义前置递增/递减运算符

区分前置和后置运算符

普通地重载形式无法区分前置和后置运算符。为了解决这个问题,后置版本接受一个额外的(不被使用)int类型的形参。当我们使用后置运算符时,编译器为这个形参提供一个值为0的实参。这个形参的唯一作用时区分前置版本和后置版本的函数,而不是真的要在实现后置版本时参与运算。

显式地调用后置运算符

七、成员访问运算符

对箭头运算符返回值的限定

八、函数调用运算符

如果类重载了函数调用符,则我们可以像使用函数一样使用该类的对象。因为这样的类同时也能存储状态,所以与普通函数相比它们更加灵活。

函数调用运算符必须是成员函数。一个类可以定义多个不同版本的调用运算符,相互之间应该在参数数量或类型上有所区别。

如果类定义了调用运算符,则该类的对象称作函数对象。因为可以调用这种对象,所以我们说这些对象的“行为像函数一样”。

含有状态的函数对象类

函数对象类通常含有一些数据成员,这些成员被用于定制调用运算符中的操作。

例如,定义一个打印string实参内容的类。

函数对象常常作为泛型算法的实参。

1. lambda是函数对象

当我们编写了一个lambda后,编译器将该表达式翻译成一个未命名类的未命名对象。在lambda表达式产生的类中含有一个重载的函数调用运算符。

默认情况下lambda不能改变它捕获的变量。因此在默认情况下,由lambda产生的类当中的函数调用运算符是一个const成员函数。如果lambda被声明成可变的,则调用运算符就不是const的了。

表示lambda及相应捕获行为的类

2. 标准库定义的函数对象

标准库定义了一组表示算术运算符、关系运算符和逻辑运算符的类,每个类分别定义了一个执行命名操作的调用运算符。这些类型定义在functional头文件中。

在算法中使用标准库函数对象

标准库规定其函数对象对于指针也同样适用。

3. 可调用对象与function

C++语言中有几种可调用的对象:函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用运算符的类。

不同类型可能具有相同的调用形式

标准库function类型

function是一个模板,定义在functional头文件中。当创建一个具体的function类型时我们必须提供额外的信息。

在此例中所谓额外的信息是指function类型能够表示的对象的调用形式。

重载的函数与function

九、重载、类型转换与运算符

转换构造函数和类型转换运算符共同定义了类类型转换,这样的转换有时也被称作用户定义的类型转换。

1. 类型转换运算符

类型转换运算符是类的一种特殊成员函数,它负责将一个类类型的值转换成其他类型。类型转换函数的一般形式如下所示:

        operator type() const;

其中type表示某种类型。类型转换运算符可以面向任意类型(除了void之外)进行定义,只要该函数能作为函数的返回类型。

显式的类型转换运算符

不过存在一个例外,即如果表达式被用作条件,则编译器会将显式的类型转换自动应用于它。

2. 避免有二义性的类型转换

实参匹配和相同的类型转换

二义性与转换目标为内置类型的多重类型转换

重载函数与转换构造函数

重载函数与用户定义的类型转换

3. 函数匹配与重载运算符

重载的运算符也是重载的函数。

Wafer的T7 Code是什么,怎么来的 在半导体Cim系统中,waferstart 业务需要支持 Sorter 读取 Wafer 的 T7 Code,与 MES 的 Wafer ID 进行绑定,以便向 前追溯 Wafer 历史,那么问题来了,T7code 是什么Wafer的T7 Code是一种,用于标识双面抛光的晶圆。这种标记采用二维矩阵代码符号,适用于各种尺寸的晶圆,不仅限于450mm无缺口晶圆7。T7 Code是衬底来料背面通常会有的供应商刻的追溯ID,这是一串数字和字母组成的流水码。 阅读详情

相关推荐

从零开始,用Cadence Virtuoso手把手仿真一个1.5V LDO(附完整电路与仿真脚本)

本文详细介绍了如何使用Cadence Virtuoso从零开始仿真一个1.5V LDO,包括环境准备、电路导入、Testbench构建、核心仿真类型分析以及高级调试技巧。通过完整的电路与仿真脚本,帮助读者掌握LDO设计与仿真的关键技术,提升电路设计能力。

weixin_31309419的博客 447

学习C++Prime第十五章第二节

2、定义基类和派生类 定义基类和派生类的方式在很多方面都与我们已知的定义其他类的方式类似,但是也有一些不同之处。 2.1、定义基类 NOTE:基类通常都应该定义一个虚析构函数,即便该函数不执行任何实际操作也是如此。 成员函数与继承 ...

极乐净土 558

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 212

《C++ primer》(第5版) chapter14 读书笔记

文章目录14.1 基本概念14.2 输入和输出运算符14.3 算术和关系运算符14.4 赋值运算符14.5 下标运算符14.6 递增和递减运算符14.7 成员访问运算符14.8 函数调用运算符14.9 重载、类型转换与运算符总结 14.1 基本概念 对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算对象传递给第二个参数 如果一个运算符函数是成员函数,则它的第一个(左侧)运算对象绑定到隐式的this指针上 对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数 对于重载的运算符来

qq_39621037的博客 358

告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置

本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。

yog99的博客 498

openclaw + ollama本地模型 + 飞书平台 windows平台部署教程

本教程将指导您在 Windows 10/11 环境下,通过 Ollama 运行本地模型,并结合 OpenClaw 接入飞书,搭建一个完全本地化的 AI 助手。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 2177

c++ primer 第五版第十四章

14.1 在什么情况下重载的运算符与内置运算符有所区别?在什么情况下重载的运算符又与内置运算符一样? 区别 我们可以直接通过对象调用一个重载运算符,如data1.operator+(data2)。 重载运算符必须是一个类的成员或者至少有一个参数是类类型。 某些运算符指定了运算对象的求值顺序或短路求值属性,这些规则我们无法应用到重载运算符上,比如逻辑运算符、关系运算符和逗号运算符。 相同 重载...

weixin_30695195的博客 390

西电微机系统课程设计——步进电机开环控制系统设计

西电微机系统课程设计——步进电机开环控制系统设计 一、课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 3.搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50 米,CPU收到水位信号后,根据水位高度控制步进电机(水闸)进行调节。 三、系统功能与设计要求 基本功能要求 手

OutlierLi's Blog 7531

c++ primer中文版第五版作业第十四章

的,可以避免被默认转换成bool,导致意料之外的运算结果。此类型转换可以用在条件判断处,而explicit的类型转换运算符用在条件判断时可以被隐式的执行。这个输入运算符如果仍然给定上个练习的输入,那么第一个输入仍将得到合法的对象,而第二个输入会得到非法的对象。类的信息是雇员的名字、年纪、收入、电话,算术运算符对其没有明确的意义,故不应该含有其他算术运算符。因为重载的函数调用运算符可接受的参数是不一定的,所以它应该接受几个运算对象不确定。此重载的输入运算符没有判断输入失败的情况,在输入失败时,

fuluoyide312的博客 877

【论文精读】Virtual Adversarial Training——一种用于监督学习和半监督学习的正则化方法

本文提出了一种新的正则化方法——虚拟对抗训练(Virtual Adversarial Training, VAT),旨在通过引入虚拟对抗损失来增强模型的泛化能力。虚拟对抗损失衡量了给定输入条件下条件标签分布的局部平滑性,定义为模型对输入数据点周围局部扰动的鲁棒性。与传统对抗训练不同,VAT不需要标签信息来定义对抗方向,因此适用于半监督学习。本文详细阐述了VAT的核心方法,并通过实验验证了其在多个基准数据集上的有效性。:虚拟对抗训练;正则化方法;监督学习;半监督学习;对抗方向。

nmdbbzcl的博客 366

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

WW、forever的博客 146

C++Prime14章学习笔记

14. 重载运算与类型转换 14.1基本概念 重载的运算符是具有特殊名字的函数,它由关键字 operator与后面定义的符号组成,重载函数包含返回类型,参数列表以及函数体。重载运算符的参数数量与该运算符的作用的运算对象数量一样多。 如果一个运算符函数是成员函数,则其第一个运算对象绑定到this指针上。 对于一个运算符函数来说,它或者是类的成员或者至少含有一个类类型的参数。 ...

qq_33522787的博客 194

【OpenClaw】Edict 三省六部制部署与启动

文章摘要 本文聚焦Edict系统的本地部署与启动,提供三种安装方式:Docker快速体验、macOS/Linux原生安装和Windows生产仿真。核心目标是让用户能够独立完成系统启动和基础问题排查,确保看板、后端服务、同步脚本和网关正常运行。文章强调环境检查的重要性,并给出具体验收标准:浏览器能访问看板页面(http://127.0.0.1:7891)和接口返回JSON数据。同时提供一键启动/停止脚本和常见问题处理建议,帮助用户快速验证部署结果。配套系列教程涵盖部署启动、使用实战、二次开发和封装版本使用等内

Mr数据杨 2904

C++Prime 第14章 前30题

C++Prime 第14章 前30题 练习14.1 重载运算符与内置运算符: 区别: 1)某些运算对象的求值规则无法在重载运算符中保存下来.比如&&和||的短路求值特性被舍弃. 2)重载运算符必须要求至少有一个成员是class类型 相同: 1)一般来说,优先级,结合律和操作数的数目是一致的. 2)一般来说,表达的逻辑是相同的. 练习14.2 friend std::istream& operator>>(std::istream& is, Sales_data&

weixin_42254068的博客 245

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++Prime 第14章后23题

C++Prime 第14章后23题 练习14.31 智能指针或内置类型,可以自己管理自己拥有的资源,于是使用编译器合成的拷贝控制函数就满足要求了. 练习14.32 class X { public: string* operator->() { return ptr->operator->(); }; private: StrBlobPtr* ptr; }; 练习14.33 重载的函数调用运算符最少接受0个对象,最多接受无限个对象. 练习14.34 #pragma once #inc

weixin_42254068的博客 214

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++prime读书笔记(三)拷贝控制、运算重载与类型转换、对象继承、模板与泛型

title: C++prime读书笔记(三)拷贝控制、运算重载与类型转换、对象继承、模板与泛型description: C++prime读书笔记(三)拷贝控制、运算重载与类型转换、对象继承、模板与泛型tag: 读书笔记。

芸兮的博客 927

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

2021-09-05 《C++ Primer》学习记录:第14章

文章目录第 14 章 重载运算与类型转换14.1 基本概念14.2 输入和输出运算符14.2.1 重载输出运算符 <<14.2.2 重载输入运算符 >>14.3 算术和关系运算符14.3.1 相等运算符14.3.2 关系运算符(*)14.4 赋值运算符14.5 下标运算符14.6 递增和递减运算符14.7 成员访问运算符14.8 函数调用运算符14.8.1 lambda 是函数对象14.8.2 标准库定义的函数对象14.8.3 可调用对象与 function14.9 重载、类型转换与

zheliku的博客 410

《C++ Primer》学习笔记(四):优先级和关系运算符

专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.youkuaiyun.com/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第3章 - 字符串、向量和数组 文章目录专栏C++学...

种树最好的时间是10年前,其次是现在!!! 3933

C++ prime 中文版第五版 第四章 表达式 笔记

1.嵌套条件运算符 finalgrade=(grade>90)?“high pass” :(grade<60)?“fail”:“pass” 2.条件运算符嵌套越多,代码可读性越差,因此,条件运算符的嵌套最好别超过两到三层。 3.条件运算符的优先级比较低,嵌入到长表达式时通常两端加括号。(例如:与输出cout) 4.关于位运算的符号位如何处理没有明确的规定,所以强烈介意仅将位运算符用于处...

weixin_45413328的博客 234

《C++ Primer 中文版》第四 章读书笔记及习题解答

目录第四章 表达式简介4.1 基础4.11 基本概念4.2 算术运算符。4.3 逻辑和关系运算符4.4 赋值运算符4.5 递增和递减运算符4.6 成员访问运算符4.7 条件运算符4.8 位运算符4.9 sizeof运算符4.10 逗号运算符4.11 类型转换4.12 运算符优先级表小结 第四章 表达式 简介   C++语言提供了一套丰富的运算符,并定义了这些运算符作用于内置类型的运算对象时所执行的操作。同时,当运算对象是类类型时,C++语言也允许由用户指定上述运算符的含义。本章主要介绍由语言本身定义、并用于

qq_44732492的博客 1305

C++ Prime 中文版第五版 第六章 函数 笔记

1.函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。 2.未初始化的内置类型局部变量将产生未定义的值。静态局部变量除外,初始化为0。 3.如果一个函数永远也不会被用到,那它可以只有声明没有定义。 4.熟悉C的程序员常常使用指针类型的形参访问函数外部的对象。在C++语言中,建议使用引用类型的形参替代指针。 ...

weixin_45413328的博客 264

C++ Prime Plus 笔记

2020/09/12 P1-P36 C++源文件必须使用正确后缀,这种信息将告知编译器,如果UNIX编译器显示“bad magic number”则表明后缀不正确 UNXI下编译多个源码文件时,编译器不会删除目标代码文件(.o) C++对大小写敏感 C++使用分号作为终止符(terminator),是语句的结束标记,是语句的组成部分,不能省略 形参agrument,实参parameter 在C语言中,省略返回类型相当于说函数的类型为int,C++逐步淘汰了这种用法 在C++中,让括号空着与在括号中使用v

qq_36234407的博客 559

c++ prime plus 第十一章 第6题

前几天开始上课,偶尔翻了一下c++第十一章。主要讲了重载,友元,类型转换。。。 跳过了随机函数的那一小块。现在,基本上结合书可以写出这一章的内容,实现重载,友元,类型转换等。还不是很熟练,可以以后多练练书后面的习题。 //stonewt.h #ifndef STONEWT_H_INCLUDED #define STONEWT_H_INCLUDED #include //没有用状态成员mod

hellwrld171的博客 366

最新C++ Primer Plus(四)

完整阅读C++ Primer Plus #   系统重新学习C++语言部分,记录重要但易被忽略的,关键但易被遗忘的。 使用类#   1、不能重载的运算符 复制代码 1 sizeof sizeof运算符 2 . 成员运算符 3 .* 成员指针运算符 4 :: 作用域解析运算符 5 ?: 条件运算符 6 typeid 一个RTTI运算符 7 const_cast 强制类型转换运算符 8 dy

haozige888的博客 238

C++ //练习 14.16 为你的StrBlob类(参见12.1.1节,第405页)、StrBlobPtr类(参见12.1.6节,第421页)、StrVec类(参见13.5节,第465页)。。

C++ Primer(第5版) 练习 14.16

Made in Code 354

C++ Primer Plus习题及答案-第十一章

C++ Primer Plus习题及答案-第十一章 习题选自:C++ Primer Plus(第六版) 内容仅供参考,如有错误,欢迎指正 !

jianmo的博客 1003
上一篇: CUDA C变成权威指南 第二章 CUDA编程模型
下一篇: C++ Primer 第五版 第15章 面向对象程序设计
青禾子的夏
博客等级 码龄8年 405粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值