【C++例8-2】 将单目运算符“++”重载为成员函数

课本里的例题,记录一下知识点

1.前置运算符返回值是Clock类引用,后置返回的是Clock类

前置是直接自增,然后参与运算,后置是先参与运算,再自增

①所以前置可以直接改变,并返回引用,返回引用也有利于继续对对象进行操作

返回引用:可以允许对同一个对象进行连续的递增操作,如++(++myClock),而且还可以与其他操作符链式使用。返回引用还可以使得表达式可以作为左值使用,允许对返回的对象进行赋值等操作

②而后置需要返回一个未自增之前的副本来参与接下来的运算,这也是C++语法的规则

2.this指针指向该对象本身

3.C++中有一个规定,用传递参数有无int来区分前置还是后置

实际上,这里int并没有实际作用,也不用特地传递,但是一定要写

4.在类中声明函数成员的默认值参数,在类外不能重复声明,即使两次声明值一样

5.使用重载后的运算符没有特殊函数格式,与使用普通运算符一样,但是要注意声明重载运算符函数的格式

//例8-2 将单目运算符“++”重载为成员函数
#include<iostream>
using namespace std;
class Clock {
public:Clock(int hour = 0, int minute = 0, int second = 0);void showTIme() const;Clock& operator++();	//前置单目运算符Clock operator++(int);	//后置单目运算符
private:int hour, minute, second;
};Clock::Clock(int hour/*=0*/, int minute/*=0*/, int second/*=0*/) {if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60) {this->hour = hour;this->minute = minute;this->second = second;}elsecout << "Time error!" << endl;
}void Clock::showTIme() const {cout << hour << ':' << minute << ':' << second << endl;
}Clock& Clock::operator++() {	//前置单目second++;if (second >= 60) {second -= 60;minute++;if (minute >= 60) {minute -= 60;hour = (hour + 1) % 24;}}return *this;
}Clock Clock::operator++(int) {		//后置单目//注意参数表中的整型参数Clock old = *this;++(*this);return old;
}int main() {Clock myClock(23, 59, 59);cout << "First time onput: ";myClock.showTIme();cout << "Show myClock++: ";(myClock++).showTIme();cout << "Show ++myClock: ";(++myClock).showTIme();return 0;
}
// 输出
First time onput: 23:59:59
Show myClock++: 23:59:59
Show ++myClock: 0:0:1

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

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

相关文章

Spark Standalone模式部署

准备至少2台虚拟机&#xff0c;装好linux系统&#xff0c;我装的是Ubuntu20.04。 1.修改主机名&#xff08;每台&#xff09; 1&#xff09;修改/etc/hostsname内容&#xff0c;主节点改为master&#xff0c;子节点改为slaver1 sudo vim /etc/hostname 2&#xff09;在/etc/…

如何通过外发文件控制,保障企业对核心业务数据的控制力?

外发文件控制是企业数据安全管理的重要组成部分&#xff0c;它涉及到对从企业内网向外发送的文件进行严格控制和管理&#xff0c;以防止敏感或机密信息的泄露。以下是常见的一些外发手段及问题&#xff1a; &#xff08;1&#xff09;IM通讯工具 如微信、QQ、企业微信、钉钉、…

4.0-Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

Python 序列&#xff08;Sequence&#xff09;是指按特定顺序依次排列的一组数据&#xff0c;它们可以占用一块连续的内存&#xff0c;也可以分散到多块内存中。Python 中的序列类型包括列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字典&#xff08…

如何通过文件外发管理系统,保护企业机密数据不外泄?

在互联网时代&#xff0c;企业与外界进行频繁的信息沟通已成为必要的一种业务模式&#xff0c;而在交互的过程中很可能会涉及到企业的相关敏感信息&#xff0c;一旦不慎流出就将会面临失控的风险。像员工在掌握了公司的关键信息后另起炉灶&#xff0c;设立同类型公司&#xff0…

C++中整型乘以0.01快还是除以100快?

相关代码及说明请见下文&#xff1a; int64_t mulFunc(int64_t a) {return (int64_t)(a * 0.01); }int64_t divFunc(int64_t a) {// 注意&#xff0c;除数必须是整型, 例如你不能把100改为100.0。如果你改了&#xff0c;计算速度将大幅下降(因为这样一来将计算过程变为浮点运算…

如何正确设计 TCP/IP 流式应用层网络协议

在我多年打黑工的职业生涯之中&#xff0c;除了在盛大游戏出身的半个老师&#xff08;做游戏服务器的&#xff09;曾今深入的教过我&#xff0c;关于正确的 TCP/IP 流式应用层网络协议的设计理念&#xff0c;前往其它公司打黑工、包括一些的开源项目&#xff0c;见识到的 TCP/I…

每个开发人员都应该知道的13个Nodejs库

Node.js&#xff0c;作为一种广受推崇的后端JavaScript环境&#xff0c;已成为众多网络开发者的首选。它不仅位列全球最流行编程语言之一&#xff0c;还通过JavaScript库的代码复用功能&#xff0c;极大地提升了项目开发效率。然而&#xff0c;面对众多选项&#xff0c;挑选合适…

mybatis快速入门-注解版

mybatis 使用注解&#xff0c;简化 xml 配置&#xff0c;汲及到动态 sql 或是多表查询&#xff0c;还是使用 xml 映射文件配置编写。(企业工作中&#xff0c;几乎全是 xml 配置&#xff0c;xml 的 sql 使用注解方式少,而类引用注解方式)。 注解 Select()&#xff1a;查询Inse…

Spring事务失效可能是哪些原因

典型回答 Spring中比较容易失效的就是通过Transactional 定义的声明式事务&#xff0c;他在以下几个场景中会导致事务失效&#xff0c;首先&#xff0c;就是Spring的Transactional是基于Spring的AOP机制实现的&#xff0c;而AOP机制又是基于动态代理实现的。那么如果代理失效了…

ArrayList与顺序表(2)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1…

归并排序精讲

一.定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子…

C++ 虚表起源

本文会让看不见 摸不着的虚表(Vtable),虚指针(Vptr)彻底现行 本文涉及思想: C 面向对象 封装 继承 多态 中的 多态 概念解释: 虚表指针&#xff1a; 这是指向虚表&#xff08;vtable&#xff09;的指针&#xff0c;虚表中包含了该类的所有虚函数对应的地址。 虚表&#x…

外贸客户开发有用的软件

外贸客户开发过程中&#xff0c;选择合适的软件工具能够显著提升效率和效果。以下是一些对外贸客户开发非常有用的软件&#xff1a; CRM系统&#xff1a; Salesforce&#xff1a;全球领先的CRM平台&#xff0c;提供强大的客户关系管理、市场分析、销售自动化等功能&#xff0c;…

vue基础语法学习

Object.defineProperty方法的使用 // 这是一个普通的对象 let phone {} // 给这个phone新增一个属性 三个参数&#xff1a;新增属性的对象&#xff0c;新增啥属性&#xff0c;属性值&#xff0c;key value对 Object.defineProperty(phone,color,{value:太空灰, //设置属性值wr…

联合概率、条件概率、边缘概率、贝叶斯定理

事件 事件是实现的一组结果(一个或多个)。就像"扔硬币时反面是事件"&#xff0c;“从一副纸牌中选择国王(国王中的任何一个)也是事件”, “roll到5是事件等” 独立每个事件均不受其他事件影响。例: 抛硬币两次。第一次扔事件的结果不会影响第二个事件结果 相关(也…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量&#xff1a;共 50 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 应用领域&#xff1a;医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图&#xff0c;设计规范内容清晰…

深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)

目录 成员函数种类 虚函数的实现 单一继承下的虚函数 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#xff0c;或文章末尾扫描二维码&#xff0c;自动获得推文…

邮件接口的安全性如何保障?如何有效使用?

邮件接口故障时如何处理&#xff1f;怎么设置和配置邮件接口&#xff1f; 邮件接口作为企业内外部沟通的重要桥梁&#xff0c;其安全性显得尤为重要。那么&#xff0c;邮件接口的安全问题如何保障。AokSend将深入探讨如何保障邮件接口的安全性&#xff0c;确保企业信息的安全传…

什么是仪器校准报告?

在科学实验和工业生产中&#xff0c;仪器是一种非常重要的辅助工具&#xff0c;无论是测量数据、控制实验进程还是保证产品质量&#xff0c;仪器都发挥着至关重要的作用。为了确保仪器的准确性和稳定性&#xff0c;仪器校准报告这一概念应运而生。本文给大家详细介绍仪器校准报…

科研基础与工具(论文写作)

免责申明&#xff1a; 本文内容只是学习笔记&#xff0c;不代表个人观点&#xff0c;希望各位看官自行甄别 参考文献 科研基础与工具&#xff08;YouTube&#xff09; 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候&#xff0c;不不知道怎么…