C++运算符重载

要点总结如下:


1.前置单目运算符重载和后置单目运算符重载在语法形式上的区别就是前者重载函数没有形参,而后者重载函数有一个整型形参,此形参对函数体没有任何影响,这只是语法上的规定,仅仅是为了区分前置和后置

  // 前置--运算符重载
    
    Coordinate &operator--()
    {
        m_iX--;
        m_iY--;
        return *this;
    }
    
    
    // 后置--运算符重载
    Coordinate &operator--(int) 
    {
        Coordinate old(*this);
        this->m_iX--;
        this->m_iY--;
        return old;
    }

        #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 << "错误的时间!" << endl;
       }
       void Clock::ShowTime()
       {
                    cout << Hour << ":" << Minute << ":" << Second << endl;
       }
      Clock& Clock::operator ++() //前置单目运算符重载函数
      { 
                    Second++;
                    if(Second>=60)
                    {   
                               Second=Second-60;
                               Minute++;
                               if(Minute>=60)
                               {
                                         Minute=Minute-60;
                                         Hour++;
                                         Hour=Hour%24;
                               }
                     }
                     return *this;
       }
       //后置单目运算符重载
       Clock Clock::operator ++(int)      //注意形参表中的整型参数 
       {    
                    Clock old=*this;
                    ++(*this);
                    return old;
       }
       int main()
       {
                   Clock myClock(23,59,59);
                   cout<<"初始时间myClock:";
                   myClock.ShowTime();
                   cout<<"myClock++:";
                   (myClock++).ShowTime();
                   cout<<"++myClock:";
                   (++myClock).ShowTime();
                   return 0;
       }



2.只存在重载单目和双目运算符,不存在三目的. 单目重载为成员的话,需要0个参数,重载为友元的话,需要1个参数. 双目重载为成员的话,需要1个参数,重载为友元的话,需要2个参数.重载的友元函数不属于任何类,运算符的操作数都需要通过函数的形参表传递。操作数在形参表中从左到右出现的顺序就是用运算符写表达式时操作数的顺序。


3,流输入输出运算符重载只能通过友元来实现

istream & operator>>(istream &,自定义类&);
ostream & operator<<(ostream &,自定义类&);

函数形式表现如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值