要点总结如下:
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 &,自定义类&);
函数形式表现如下: