zoukankan      html  css  js  c++  java
  • 运算符号重载:前置与后置单目运算++

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

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

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

  • 相关阅读:
    [转]MFC与Qt的内存管理
    [转]QT项目生成流程例图
    [转]vc中nmake.exe cl.exe 的使用
    android_layout_linearlayout(二)
    android_layout_relativelayout(一)
    android_layout_linearlayout(一)
    android_layout_relativelayout(二)
    android_activity_研究(一)
    两个线程解决一个线程卡之路
    android_layout_framelayout
  • 原文地址:https://www.cnblogs.com/lovemo1314/p/2198075.html
Copyright © 2011-2022 走看看