self-confidence,the source of all the power

导航

运算符号重载:前置与后置单目运算++

区别:就在于函数的形参,语法规定,前置单目运算符重载为成员函数时没有形参,后置单目运算符重

重载为成员函数时需要一个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();
}            

注意:符号重载并不能改变符号的优先级,其中(),[],->, = 必须重载为类的成员函数,不能是普通的全局函数

 

posted on 2011-10-02 18:01  漩涡鸣人  阅读(2658)  评论(0编辑  收藏  举报