运算符号重载:前置与后置单目运算++
区别:就在于函数的形参,语法规定,前置单目运算符重载为成员函数时没有形参,后置单目运算符重
重载为成员函数时需要一个int型形参,这个int型参数在函数体中并不使用,纯粹用来区别前置与后置。
课本上一个例子:
#include<iostream> using namespace std; class Clock { public: Clock(int NewH=0,int NewM=0,int NewS=0); void ShowTime(); Clock& operator ++();//前置单目运算符重载 Clock operator ++(int);//后置单目运算符 private: int Hour,Minute,Second; }; Clock::Clock(int NewH,int NewM,int NewS) { if(0<=NewH&&NewH<24&&0<=NewM&&NewM<60&& 0<=NewS&&NewS<60) { Hour=NewH; Minute=NewM; Second=NewS; } else cout<<"Time error!"<<endl; } void Clock::ShowTime() { cout<<Hour<<":"<<Minute<<":"<<Second<<endl; } Clock& Clock::operator ++() //前置++,如++n,最后返回的是n.使用对象的引用 { Second++; if(Second>=60) { Second=Second-60; Minute++; if(Minute>=60) { Minute=Minute-60; Hour++; Hour=Hour%24; } } return *this; } Clock Clock::operator ++(int) //后置++,如n++,返回的是运算前的对象值n,不用引用。 { Clock old=*this; ++(*this); return old; }
int main() { Clock myClock(23,59,59); cout<<"Frist time output:"; myClock.ShowTime(); cout<<"show myClock++:"; (myClock++).ShowTime(); cout<<"show ++myClock:"; (++myClock).ShowTime(); }
注意:符号重载并不能改变符号的优先级,其中(),[],->, = 必须重载为类的成员函数,不能是普通的全局函数