C++重载前置和后置++运算符
2022/2/1 14:59:26
本文主要是介绍C++重载前置和后置++运算符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
重载前置和后置++运算符
大家在学习运算符号的时候应该是注意到了++的两种用法,一种是前置的,一种是后置的
二者的主要的区别就是一个是先增加后取值,一个是先取值后自加
下面通过一个案例来解释一下重载++运算符号,来源:清华c++
C l o c k . h Clock.h Clock.h
#ifndef CPP_PRIMER_HEAD_H #define CPP_PRIMER_HEAD_H 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, int minute, int second) { //构造函数 if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60) { this->hour = hour; this->minute = minute; this->second = second; } else cout << "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; //返回的是自身,过程就就是自身的second + 1, 然后返回自身 } Clock Clock::operator++(int) { //与前置的++运算符号进行区分,但是参数列表不具体的使用 Clock old = *this; //创建一个副本存储原来的对象 ++ (*this); return old; //最终返回的是原先的没有动过的对象,然后对象*this进行自加 } #endif //CPP_PRIMER_HEAD_H
m a i n . c p p main.cpp main.cpp
#include <iostream> #include "head.h" #include <cstring> #include <algorithm> using namespace std; int main() { Clock myClock(23, 59, 59); cout << "First time output: "; myClock.showTime(); cout << "Show myClock++: "; (myClock++).showTime(); cout << "Show ++myClock: "; (++myClock).showTime(); return 0; }
结 果 显 示 结果显示 结果显示
F:\CPP\cmake-build-debug\CPP_primer.exe First time output: 23:59:59 Show myClock++: 23:59:59 Show ++myClock: 0:0:1
结果:
第一次是(myClock++)调用显示函数, 源副本调用函数,不过此时对象的值确实自加了,时间为0:0:0
第二次是(++myClock)调用显示函数, 自加之后的对象调用函数,本来时间已经是0:0:0 ,自加后调用最终显示0:0:1
下面解释&总结一下:
- 我们重载了两种++运算符号,都是不需要参数的,但是为了进行区分我们就设置一个不使用的参数
- 前置++运算符号是可以进行 连续运算的:
++(++a)
,因此我们的函数返回值是一个 引用- 看代码我们知道,后置++运算符号是先产生了一个 副本存储原来的对象内容,之后对 本身进行自加,然后将 副本返回,因此在效率上面肯定是前置自加更好,因为后置自加产生副本就是一个 拷贝构造的过程
这篇关于C++重载前置和后置++运算符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Nacos初识学习入门:轻松掌握服务发现与配置管理
- 2024-12-27Nacos初识学习入门:轻松掌握Nacos基础操作
- 2024-12-27Nacos多环境配置学习入门
- 2024-12-27阿里云ECS学习入门:新手必看教程
- 2024-12-27阿里云ECS新手入门指南:轻松搭建您的第一台云服务器
- 2024-12-27Nacos做项目隔离:简单教程与实践指南
- 2024-12-27阿里云ECS学习:新手入门指南
- 2024-12-27Nacos做项目隔离学习:新手入门教程
- 2024-12-27文件掩码什么意思?-icode9专业技术文章分享
- 2024-12-27如何使用循环来处理多个订单的退款请求,代码怎么写?-icode9专业技术文章分享