自增自减运算符重载
Posted wanghao-boke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自增自减运算符重载相关的知识,希望对你有一定的参考价值。
递增运算符(++)和递减运算符(--)是C++语言中两个重要的一元运算符。
/*** addMyself.cpp ***/ #include<iostream> using namespace std; class Time private: int hours; int minutes; public: Time() hours = 0; minutes = 0; Time(int h,int m) hours = h; minutes = m; void displayTime() cout << "H: " << hours << " M" << minutes << endl; //重载前缀递增运算符 Time operator++() ++minutes; if(minutes >= 60) ++hours; minutes -= 60; return Time(hours,minutes); //重载后缀递增运算符 Time operator++(int) Time T(hours,minutes); ++minutes; if(minutes >= 60) ++hours; minutes -= 60; return T; ; int main() Time T1(11,59),T2(10,40); ++T1; T1.displayTime(); ++T1; T1.displayTime(); T2++; T2.displayTime(); T2++; T2.displayTime(); return 0;
运行结果:
exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ addMyself.cpp -o addMyself
exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addMyself
H: 12 M0
H: 12 M1
H: 10 M41
H: 10 M42
注意:int在括号是为了向编译器说明这是一个后缀形式,而不是表示整数。
前缀形式重载调用Check operator++(),后缀形式重载调用operator++(int)
/*** addOver.cpp ***/ #include<iostream> using namespace std; class Check private: int i; public: Check():i(0); Check operator++ () Check temp; temp.i = ++i; return temp; Check operator ++ (int) Check temp; temp.i = i++; return temp; void Display() cout << "i = " << i << endl; ; int main() Check obj1,obj; obj.Display(); obj1.Display(); obj1 = ++ obj; obj.Display(); obj1.Display(); obj1 = obj++; obj.Display(); obj1.Display(); return 0;
运行结果:
exbot@ubuntu:~/wangqinghe/C++/20190808$ ./addOver
i = 0
i = 0
i = 1
i = 1
i = 2
i = 1
递减和递增运算符重载:
- 递增和递减一般是对改变对象的状态,所以一般是重载为成员函数。
- 重载递增递减,一定要和指针的递增递减区分。因为这里重载操作的是对象,而不是指针(由于指针是内置类型,指针的递减递增是无法重载的),所以一般情况的递增递减是操作对象内部的成员变量。
- 递增和递减分为前置和后置情况,a = ++b;(前置), a = b++。因为符号一样,所以给后置版本加一个int形参作为区分。这个形参是0,但是在函数体中用不到,只是为了区分前置后置而已。
以上是关于自增自减运算符重载的主要内容,如果未能解决你的问题,请参考以下文章