<1>运算符重载为成员函数
双目运算符:+,-
#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 &c)const;
Complex operator-(const Complex &c)const;
void display()const;
private:
double real,imag;
};
Complex Complex::operator+(const Complex &c)const
{
return Complex(real+c.real,imag+c.imag);
}
Complex Complex::operator-(const Complex &c)const
{
return Complex(real-c.real,imag-c.imag);
}
void Complex::display()const
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
int main()
{
Complex cmp1(1,3),cmp2(2.3,4.5);
(cmp1+cmp2).display();
Complex cmp3=cmp1+cmp2;
cmp3.display();
return 0;
}
单目运算符:++,--
#include<iostream>
using namespace std;
class CLOCK
{
public:
CLOCK(int hour=0,int minute=0,int second=0);
void SHOWTIME()const;
CLOCK(const CLOCK &clock);
CLOCK& operator++();//前置单目运算符没有参数
CLOCK operator++(int);//后置单目运算符有一个int型参数
private:
int hour;
int minute;
int second;
};
CLOCK::CLOCK(const CLOCK &clock)
{
hour=clock.hour;
minute=clock.minute;
second=clock.second;
}
CLOCK::CLOCK(int hour,int minute,int second)
{
if(hour<0||hour>23
|| minute<0||minute>59
|| second<0||second>59)
{
cout<<"SET TIME ERROR!"<<endl;
return;
}
this->hour=hour;
this->minute=minute;
this->second=second;
}
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;
}
}
}
CLOCK CLOCK::operator++(int)
{
CLOCK clock=*this;
++(*this);//调用前置单目运算符"++operator"
return clock;
}
int main()
{
CLOCK clockerror(56,12,4);
CLOCK clock1(2,45,6);
CLOCK clock2=clock1;
CLOCK clock3;
for(int i=1;i<=888;i++)
{
clock3=clock1++;
++clock2;
}
clock1.SHOWTIME();
clock2.SHOWTIME();
clock3.SHOWTIME();
return 0;
}
<2>运算符为非成员函数:形参的顺序从左到右就是操作符的顺序,如果需要访问类的私有成员,需要定义友元函数。
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0.0,double i=0.0):real(r),imag(i){}
friend Complex operator+(const Complex &c1,const Complex &c2);
friend Complex operator-(const Complex &c1,const Complex &c2);
friend void display(Complex &c);
private:
double real,imag;
};
Complex operator+(const Complex &c1,const Complex &c2)
{
return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
Complex operator-(const Complex &c1,const Complex &c2)
{
return Complex(c1.real-c2.real,c1.imag-c2.imag);
}
void display(Complex &c)
{
cout<<"("<<c.real<<","<<c.imag<<")"<<endl;
}
int main()
{
Complex cmp1(1,3),cmp2(2.3,4.5);
Complex cmp3=cmp1+cmp2;
display(cmp3);
return 0;
}