关于++运算符前置和后置重载的实现实例:
1 #include <iostream> 2 using namespace std; 3 //创建时钟类 4 class Clock 5 { 6 public: 7 Clock(int NewH=0,int NewM=0,int NewS=0);//构造函数 8 void ShowTime();//显示时间函数声明 9 Clock& operator ++();//前置运算符重载 10 Clock operator ++(int);//后置运算符重载 11 //关于前置运算符的后置运算符的重载说明:如果后面的括号里带有形参则为后置单目运算符重载,或无形参则为前置单目运算符重载 12 private: 13 int Hour,Minute,Second; 14 }; 15 //构造函数实现 16 Clock::Clock(int NewH,int NewM,int NewS) 17 { 18 if(0<=NewH && NewH<24 && 0<=NewM&&NewM<60&&0<=NewS && NewS<60) 19 { 20 Hour = NewH; 21 Minute=NewM; 22 Second=NewS; 23 } 24 else 25 cout<<"Time error!"<<endl; 26 } 27 //显示时间函数实现 28 void Clock::ShowTime() 29 { 30 cout<<Hour<<":"<<Minute<<":"<<Second<<endl; 31 } 32 //前置单目运算符重载实现 33 Clock& Clock::operator ++()//前置单目运算符重载函数 34 { 35 Second++; 36 if(Second>=60) 37 { 38 Second = Second-60; 39 Minute++; 40 if(Minute>=60) 41 { 42 Minute = Minute - 60; 43 Hour++; 44 Hour=Hour%24; 45 } 46 } 47 return *this; 48 } 49 //后置单目运算符重载实现 50 Clock Clock::operator ++(int)//后置单目运算符重载 51 { 52 Clock old = *this; 53 ++(*this); 54 return old; //返回自加前的对象。 55 } 56 57 void main() 58 { 59 Clock myClock(23,59,59); 60 cout<<"First time output:"; 61 myClock.ShowTime();
62 63 cout<<"Show myClock++:"; 64 (myClock++).ShowTime();
65 66 cout<<"Show ++myClock:"; 67 (++myClock).ShowTime(); 68 }
在程序中对运算符“++”进行了重载,使它能用于Clock类对象。“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符。它们的作用是不一样的,在重载时怎样区别这二者呢?针对“++”和“--”这一特点,C++约定:
在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。
请注意前置自增运算符“++”和后置自增运算符“++”二者作用的区别。前置重载是先自加,返回的是修改后的对象本身。后者返回的是自加前的对象,然后对象自加。重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。