定义和使用类的许多重要方面的总结

11.7

总结

本章介绍了定义和使用类的许多重要方面,其中的一些内容可能较难理解,但随着实践经验的不断增
加,读者将逐渐掌握它们。
·般来说,访问私有类成员的惟一方法是使用类方法。C++使用友元函数来避开这种限制。要让函数
成为友元,需要在类声明中声明该函数,并在声明前加上关键字friend。
C++扩展了对操作符的重载,允许自定义特殊的操作符函数,这种函数描述了特定的操作符与类之间
的关系。操作符函数可以是类成员函数,也可以是友元函数(有一些操作符函数只能是类成员函数)。要调
用操作符函数,可以直接调用该函数,也可以以通常的句法使用被重载的操作符。对于操作符op,其操作
符函数的格式如下:
operatorop (argument-list)
argument-list 表示该操作符的操作数。如果操作符函数是类成员函数,则第一个操作数是调用对象,
它不在argument-list 中。例如,本章通过为Vector类定义 operator+()成员函数来重载加法。如果up、right

和result都是Vector对象,则可以使用下面的任何一条语句来调用矢量加法:
result = up.operator+ (right) :
result = up + right;
在第二条语句中,由于操作数up和right的类型都是Vector,因此C++将使用Vector的加法定义。
当操作符函数是成员函数时,则第一个操作数将是调用该函数的对象。例如,在前面的语句中,up对
象是调用函数的对象。定义操作符函数时,如果要使其第一个操作数不是类对象,则必须使用友元函数。
这样就可以将操作数按所需的顺序传递给函数了。
最常见的操作符重载任务之一是定义 << 操作符,使之可与cout一起使用,来显示对象的内容。要让
ostream 对象成为第一个操作数,需要将操作符函数定义为友元;要使重新定义的操作符能与其自身拼接,
需要将返回类型声明为ostream&。下面的通用格式能够满足这种要求:
ostream & operator << (ostream & os, const c name & obj)

os << ...: // display object contents
return os:

不过,如果类包含这样的方法,它返回需要显示的数据成员的值,则可以使用这些方法,无需在
operator << ()中直接访问这些成员。在这种情况下,函数不必(也不应当)是友元。
C++允许指定在类和基本类型之间进行转换的方式。首先,任何接受惟一一个参数的构造函数都可被
用作转换函数,将类型与该参数相同的值转换为类。如果将类型与该参数相同的值赋给对象,则C++将自
动调用该构造函数。例如,假设有一个String类,它包含一个将char*值作为其惟一参数的构造函数,那
么如果bean是String对象,则可以使用下面的语句:
bean = "pinto": // converts type char * to type String
不过,如果在该构造函数的声明前加上了关键字explicit,则该构造函数将只能用于显式转换:
bean = String ("pinto"): // converts type char * to type String explicitly
要将类对象转换为其他类型,必须定义转换函数,指出如何进行这种转换。转换函数必须是成员函数。
将类对象转换为typeName类型的转换函数的原型如下:
operator typeName () :
注意,转换函数没有返回类型、没有参数,但必须返回转换后的值(虽然没有声明返回类型)。例如,
下面是将Vector转换为double类型的函数:
Vector: :operator double ()

return a double value:

经验表明,最好不要依赖于这种隐式转换函数。
读者可能已经注意到了,与简单的C风格结构相比,使用类时,必须更谨慎、更小心,但作为补偿,
它们为我们完成的工作也更多。

}

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

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

相关文章

世界名画--陈列馆问题

世界名画--陈列馆问题 问题描述python解答位操作python代码 问题描述 哨兵布置问题。一个展馆由mn个矩阵阵列的陈列室组成&#xff0c;需要在陈列室中设立哨位&#xff0c;每个哨位上的哨兵除了可以监视自己所在陈列室外&#xff0c;还可以监视他上、下、左、右四个陈列室&…

C++对C语言数据类型的扩展

1.4 C对C语言数据类型的扩展1.4.1 结构体1.4.2 联合1.4.3 枚举1.4.4 布尔1.4.5 字符串 1.4 C对C语言数据类型的扩展 基本的数据类型 char、unsigned char、int、short、unsigned shor、long、unsigned long、float、double、long double与C语言相同。扩展了bool类型&#xff0…

使用终端启动若依ruoyi

使用终端启动若依ruoyi 01 找到ruoyi-ui文件夹 02 cmd界面两个指令 npm i 下载完成后出现这个界面即为成功 npm run dev 加载结束后出现端口号即可 03 默认账号密码 访问localhost8080可得以上界面默认账号是admin默认密码是damin123

selenium元素定位与操作

说明&#xff1a;本篇博客基于selenium 4.1.0 在selenium中&#xff0c;想要对元素进行操作&#xff0c;一般需要如下步骤&#xff1a; 在浏览器中查看元素属性&#xff0c;便于selenium在页面中找到该元素在代码中创建元素对象元素操作、获取元素信息 查看元素属性 浏览器…

项目实战:自动驾驶之方向盘操纵

项目介绍 根据汽车前方摄像头捕捉的画面,控制汽车方向盘转动的方向和角度,这是自动驾驶要解决的核心问题。这个项目主要是通过使用深度神经网络解决一个回归问题。不同于分类、识别场景,回归问题中神经网络输出的是一个连续的值。 通过这个项目的学习,可以将神经网络用于通…

4070显卡配置ubuntu深度学习环境

本文主要记录一下自己深度学习环境的配置&#xff0c;具体的安装教程有很多&#xff0c;这里就不赘述了。 1.显卡型号 华硕 ATS GeForce RTX4070-o12G-GAMING 2.系统和驱动型号 ubuntu 20.04 显卡驱动版本&#xff1a;NVIDIA-Linux-x86_64-535.129.03.run 3.cuda和cudnn版…

linux常用基础命令

命令 -选项 参数 ls -a[查看隐藏文件] l[以列表形式展示] h[和l一起使用&#xff0c;可显示文件的大小] 参数[可以是任意目录&#xff0c;表示展示任意目录下的内容] mkdir -p[创建多层文件夹时使用] 参数[./test:在当前目录下创建test文件夹] touch 参数[创建任意目录下的文…

【ESP32填坑日记】问题篇⑧ VScode中提示无法使用compilerPath解析配置:“C:/xxx/xtensa-esp32-elf-gcc.exe“

关注星标公众号&#xff0c;不错过精彩内容 作者 | 量子君 微信公众号 | 极客工作室 问题描述 在编译成功&#xff0c;重启之后就编译不成功了&#xff0c;并报如图错误&#xff1a; 无法使用 compilerPath 解析配置&#xff1a;“C:/xxx/xtensa-esp32-elf-gcc.exe” 解决…

【软件工程】软件工程复习题库2023

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; SpringCloud MybatisPlus JVM 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 软件工程复习题库 一、选择题二、填空题三、判断题四…

数据结构 -- 堆

一.堆的概念 1.1 堆是什么 堆也叫做优先队列&#xff0c;一些按照重要性或优先级来组织的对象称为优先队列。 1.2 为什么需要堆 在现实生活中&#xff0c;存在许多需要从一群人、一些任务或一些对象中找出“下一位最重要”目标的情况。例如&#xff1a;在平时处理事情的时候我…

不同版本QT使用qmake时创建QML项目的区别

不同版本QT使用qmake时创建QML项目的区别 文章目录 不同版本QT使用qmake时创建QML项目的区别一、QT5新建QML项目1.1 目录结构1.2 .pro 文件内容1.3 main.cpp1.4 main.qml 二、QT6新建QML项目2.1 目录结构2.2 .pro文件内容2.3 main.cpp2.4 main.qml 三、两个版本使用资源文件的区…

鼠标响应突然不灵敏的检查方法

鼠标突然响应缓慢或者失灵&#xff0c;如下检测步骤&#xff1a; 1、首先排查电源问题&#xff0c;更换电池或者充电&#xff1b; 2、观察光标移动响应、鼠标左键响应、鼠标右键响应、鼠标滚轮等操作&#xff0c;哪些正常&#xff0c;哪些异常。 2、把鼠标接到别的机器上实验…

electron环境安装

electron环境安装 (一)、安装Nodejs、cnpm和git: 1、node.js下载和安装 下载地址&#xff1a;https://nodejs.org/en 下载文件为&#xff1a;node-v20.10.0-x64.msi Latest LTS Version: 20.10.0 (includes npm 10.2.3) 安装到 d:\nodejs\ 目录下 如果打勾自动安装附加工具&…

[Kubernetes]3. k8s集群Service详解

在上一节讲解了k8s 的pod,deployment,以及借助pod,deployment来部署项目,但会存在问题: 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod访问还需要端口转发Pod重创后IP变了,名字也变了针对上面的问题,可以借助Service来解决,下面就来看看Service怎么使用 一.Service详…

2023-12-19 AIGC-Stable Diffusion模型的下载方法汇总

摘要: 2023-12-19 AIGC-Stable Diffusion模型的下载方法汇总 Stable Diffusion模型 C站 如果你正在寻找Stable Diffusion模型&#xff0c;C站&#xff08;https://civitai.com&#xff09;是一个值得关注的平台。在这里&#xff0c;你可以找到各种版本的模型&#xff0c;满足…

✺ch5——纹理贴图

目录 加载纹理图像文件纹理坐标在着色器中使用纹理&#xff1a;采样器变量和纹理单元纹理贴图&#xff1a;示例程序多级渐远纹理贴图各向异性过滤环绕和平铺透视变形材质——更多OpenGL细节补充说明 纹理贴图是在栅格化的模型表面上覆盖图像的技术。 它是为渲染场景添加真实感的…

functools.partial:Python中灵活函数部分应用的工具

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python编程中&#xff0c;functools.partial是一个强大的工具&#xff0c;它提供了一种部分应用函数的方式&#xff0c;能够在创建新函数时固定部分参数&#xff0c;从而在后续调用中减少需要传递的参数数量。…

Python四种配色方案,适合科研的配色

1、Plasma&#xff08;等高线图颜色&#xff09;2、Inferno&#xff08;黑热图颜色&#xff09;3、Cividis&#xff08;较好的配色方案&#xff0c;适用于色盲&#xff09;4、Viridis&#xff08;绿色主导的配色方案&#xff09; 下面这四种配色是不需要指定的&#xff0c;Pyth…

element组件库的日期选择器如何限制?

本次项目中涉及到根据日期查找出来的数据进行调整,所以修改的数据必须是查找范围内的数据.需要对调整数据的日期进行限制,效果如下: 首先我们使用了element 组件库的日期选择器,其中灌完介绍, picker-options中函数disabledDate可以设置禁用状态,代码如下: <el-date-pickerv…

关于GPU使用过程中的若干问题

1.CUDA异常 问题描述&#xff1a;运行torch.cuda.is_available() 报错&#xff1a;cuda unknown error - this may be due to an incorrectly set up environment解决方案&#xff1a;重启 2.nvidia驱动版本不匹配 问题描述&#xff1a;运行nvidis-smi 报错&#xff1a;Fa…