一:双目运算符
对于双目运算符B,有 oprd1 B oprd2,其中oprd1为A类的对象,则应把B重载为A类的成员函数,该函数只有一个形参,形参的类型是oprd2所属的类型。重载以后oprd1 B oprd2相当于oprd1.opreatorB(oprd2);
例子:
#include <iostream>
using namespace std;
class Complex{
public:
Complex(double r=0.0,double i=0.0):real(r),imag(i){}
Complex operator+(const Complex &c2) const;
Complex operator-(const Complex &c2) const;
void display()const;
private:
double real;
double imag;
};
Complex Complex::operator+(const Complex &c2)const { //重载函数的实现
return Complex(real+c2.real,imag+c2.imag); //创建一个临时无名对象作为返回值
}
Complex Complex::operator-(const Complex &c2)const {
return Complex(real-c2.real,imag-c2.imag);
}
void Complex::display()const{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
int main()
{
Complex c1(5,4),c2(2,10),c3;
cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
c3=c1-c2;
cout<<"c3=c1-c2=";c3.display();
c3=c1+c2;
cout<<"c3=c1+c2=";c3.display();
return 0;
}
/*运行结果
* c1=(5,4)
* c2=(2,10)
* c3=c1-c2=(3,-6)
* c3=c1+c2=(7,14) */
二:单目运算符
- 对于前置单目运算符U,如“-”( 负号)等,若是要重载为类的成员函数,用来实现表达式 U oprd 其中oprd为A类的对象,则U应当重载为A类的成员函数,函数没有形参。经过重载以后,表达式U oprd相当与函数调用oprd.operator U();
- 对于后置运算符“++”,“--”,若是要将他们重载为类的成员函数,用来实现表达式oprd++或oprd--,其中oprd为A类的对象,那么当运算符重载为A类的成员函数时要带有一个整形(int)形参。重载后表达式oprd++和oprd--jiu相当于函数调用oprd.operator++(0)和oprd.operator--(0)这里的int类型参数在运算中起不了任何作用,知识用于区别后置++,--与前置++,--。
例子:
#include <iostream>
using namespace std;
class Clock{
public:
Clock(int hour=0,int minute=0,int second=0);
void showTime()const;
Clock& operator++();
Clock operator++(int);
private:
int hour,minute,second;
};
Clock::Clock(int hour, int minute, int second){
if(0<=hour && hour<24 &&0<=minute &&minute<60&&0<=second && second<60){
this->hour=hour;
this->minute=minute;
this->second=second;
}else
cout<<"Time error!"<<endl;
}
void Clock::showTime()const{ //显示时间函数
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Clock & Clock::operator ++(){ //前置单目运算符重载函数
second++;
if(second>=60){
second-=60;
minute++;
if(minute>=60){
minute-=60;
hour=(hour+1)%24;
}
}
return *this;
}
Clock Clock::operator ++(int){ //后置单目运算符重载
Clock old=*this;
++(*this); //调用前置++运算符
return old;
}
int main()
{
Clock myClock(23,59,59);
cout<<"First time output: ";
myClock.showTime();
cout<<"Show myClock++: ";
(myClock++).showTime();
cout<<"Show ++myClock: ";
(++myClock).showTime();
return 0;
}
/*运行结果
* First time output: 23:59:59
* show myClock++: 23:59:59
* show ++myClock: 0:0:1 */