1• 重載為類(lèi)的成員函數(shù):
格式: < 類(lèi)名 > operator < 運(yùn)算符 >(< 參數(shù)表 >)
例如:利用重載運(yùn)算符實(shí)現(xiàn)復(fù)數(shù)類(lèi)對(duì)象的算術(shù)四則運(yùn)算。
#include
class complex
{
public:
complex(){ real=imag=0;}
complex(double r,double I)
{
real=r;imag=I;
}
complex operator +(complex &c);
complex operator -(complex &c);
complex operator *(complex &c);
complex operator /(complex &c);
friend void print(complex &c);
private:
double real,imag;
};
inline complex complex::operator +(complex &c)
{
return complex(real+c.real,imag+c.imag);
}
inline complex complex::operator –(complex &c)
{
return complex(real-c.real,imag-c.imag);
}
inline complex complex::operator *(complex &c)
{
return complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
}
inline complex complex::operator /(complex &c)
{
return complex((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),
(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag));
}
void print(complex &c)
{
if(c.imag<0)
cout< else
cout< }
void main()
{
complex c1(2.0,3.0),c2(4.0,-2.0),c3;
c3=c1+c2;
cout<<”\nc1+c2=”;
print(c3);
c3=c1-c2;
cout<<”\nc1-c2=”;
print(c3);
c3=c1*c2;
cout<<”\nc1*c2=”;
print(c3);
c3=c1/c2;
cout<<”\nc1/c2=”;
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<”\n(c1+c2)*(c1-c2)*c2/c 1” ;
print(c3);
cout< }
說(shuō)明:①程序中的表達(dá)式: c1+c2 ,編譯程序?qū)⒔忉?c1.operator+(c2)
②當(dāng)重載成為成員函數(shù)時(shí),雙目運(yùn)算符僅有一個(gè)參數(shù)。對(duì)單目運(yùn)算符,重載為成員函數(shù)時(shí),總是隱含了一個(gè) 參數(shù),該參數(shù)是 this 指針。 This 指針指向調(diào)用該成員函數(shù)對(duì)象的指針。
2、重載為友員函數(shù):
當(dāng)重載友員函數(shù)時(shí),將沒(méi)有隱含的參數(shù) this 指針。這樣,對(duì)雙目運(yùn)算符,友員函數(shù)有2個(gè)參數(shù),對(duì)單目運(yùn)算符,友員函數(shù)有一個(gè)參數(shù)。
格式: friend < 類(lèi)型說(shuō)明符 >operaotr < 運(yùn)算符 >(< 參數(shù)表 >)
{……..}
例如:重寫(xiě)上例:
#include
class complex
{
public:
complex (){real=imag=0;}
complex(double r,double I)
{
real=r;imag=I;
}
friend complex operator +(complex &c1,complex &c2);
friend complex operator -(complex &c1,complex &c2);
friend complex operator *(complex &c1,complex &c2);
friend complex operator /(complex &c1,complex &c2);
friend void print(complex &c);
private:
double real,imag;
};
complex operator +(complex &c1,complex &c2)
{
return complex(c1real+c2.real,c1.imag+c2.imag);
}
complex operator –(complex &c1,complex &c2)
{
return complex(c1.real-c2.real,c1.imag-c2.imag);
}
complex operator *(complex &c1,complex &c2)
{
return complex(c1real*c2.real-c1.imag*c2.imag,c1.real*c2.imag+c1.imag*c2.real);
}
complex operator /(complex &c1,complex &c2)
{
return complex((c1.real*c2.real+c1.imag*c2.imag)/(c1.real*c2.real+c1.imag*c2.imag),
(c1.imag*c2.real-c1.real*c2.imag)/(c1.real*c2.real+c1.imag*c2.imag));
}
void print(complex &c)
{
if(c.imag<0)
cout< else
cout< }
void main()
{
complex c1(2.0,3.0),c2(4.0,-2.0),c3;
c3=c1+c2;
cout<<”\nc1+c2=”;
print(c3);
c3=c1-c2;
cout<<”\nc1-c2=”;
print(c3);
c3=c1*c2;
cout<<”\nc1*c2=”;
print(c3);
c3=c1/c2;
cout<<”\nc1/c2=”;
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<”\n(c1+c2)*(c1-c2)*c2/c 1” ;
print(c3);
cout< }
說(shuō)明: c1+c2 編譯程序結(jié)實(shí)為 operator+(c1,c2), 將調(diào)用 complex operator +(complex &c1,complex &c2) 求值。
同理, c1-c2 理解為 operator –(c1,c2), 調(diào)用 complex operator –(complex &c1,complex &c2) 實(shí)現(xiàn)上述表達(dá)式的求值。
格式: < 類(lèi)名 > operator < 運(yùn)算符 >(< 參數(shù)表 >)
例如:利用重載運(yùn)算符實(shí)現(xiàn)復(fù)數(shù)類(lèi)對(duì)象的算術(shù)四則運(yùn)算。
#include
class complex
{
public:
complex(){ real=imag=0;}
complex(double r,double I)
{
real=r;imag=I;
}
complex operator +(complex &c);
complex operator -(complex &c);
complex operator *(complex &c);
complex operator /(complex &c);
friend void print(complex &c);
private:
double real,imag;
};
inline complex complex::operator +(complex &c)
{
return complex(real+c.real,imag+c.imag);
}
inline complex complex::operator –(complex &c)
{
return complex(real-c.real,imag-c.imag);
}
inline complex complex::operator *(complex &c)
{
return complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
}
inline complex complex::operator /(complex &c)
{
return complex((real*c.real+imag*c.imag)/(c.real*c.real+c.imag*c.imag),
(imag*c.real-real*c.imag)/(c.real*c.real+c.imag*c.imag));
}
void print(complex &c)
{
if(c.imag<0)
cout<
cout<
void main()
{
complex c1(2.0,3.0),c2(4.0,-2.0),c3;
c3=c1+c2;
cout<<”\nc1+c2=”;
print(c3);
c3=c1-c2;
cout<<”\nc1-c2=”;
print(c3);
c3=c1*c2;
cout<<”\nc1*c2=”;
print(c3);
c3=c1/c2;
cout<<”\nc1/c2=”;
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<”\n(c1+c2)*(c1-c2)*c2/c 1” ;
print(c3);
cout<
說(shuō)明:①程序中的表達(dá)式: c1+c2 ,編譯程序?qū)⒔忉?c1.operator+(c2)
②當(dāng)重載成為成員函數(shù)時(shí),雙目運(yùn)算符僅有一個(gè)參數(shù)。對(duì)單目運(yùn)算符,重載為成員函數(shù)時(shí),總是隱含了一個(gè) 參數(shù),該參數(shù)是 this 指針。 This 指針指向調(diào)用該成員函數(shù)對(duì)象的指針。
2、重載為友員函數(shù):
當(dāng)重載友員函數(shù)時(shí),將沒(méi)有隱含的參數(shù) this 指針。這樣,對(duì)雙目運(yùn)算符,友員函數(shù)有2個(gè)參數(shù),對(duì)單目運(yùn)算符,友員函數(shù)有一個(gè)參數(shù)。
格式: friend < 類(lèi)型說(shuō)明符 >operaotr < 運(yùn)算符 >(< 參數(shù)表 >)
{……..}
例如:重寫(xiě)上例:
#include
class complex
{
public:
complex (){real=imag=0;}
complex(double r,double I)
{
real=r;imag=I;
}
friend complex operator +(complex &c1,complex &c2);
friend complex operator -(complex &c1,complex &c2);
friend complex operator *(complex &c1,complex &c2);
friend complex operator /(complex &c1,complex &c2);
friend void print(complex &c);
private:
double real,imag;
};
complex operator +(complex &c1,complex &c2)
{
return complex(c1real+c2.real,c1.imag+c2.imag);
}
complex operator –(complex &c1,complex &c2)
{
return complex(c1.real-c2.real,c1.imag-c2.imag);
}
complex operator *(complex &c1,complex &c2)
{
return complex(c1real*c2.real-c1.imag*c2.imag,c1.real*c2.imag+c1.imag*c2.real);
}
complex operator /(complex &c1,complex &c2)
{
return complex((c1.real*c2.real+c1.imag*c2.imag)/(c1.real*c2.real+c1.imag*c2.imag),
(c1.imag*c2.real-c1.real*c2.imag)/(c1.real*c2.real+c1.imag*c2.imag));
}
void print(complex &c)
{
if(c.imag<0)
cout<
cout<
void main()
{
complex c1(2.0,3.0),c2(4.0,-2.0),c3;
c3=c1+c2;
cout<<”\nc1+c2=”;
print(c3);
c3=c1-c2;
cout<<”\nc1-c2=”;
print(c3);
c3=c1*c2;
cout<<”\nc1*c2=”;
print(c3);
c3=c1/c2;
cout<<”\nc1/c2=”;
print(c3);
c3=(c1+c2)*(c1-c2)*c2/c1;
cout<<”\n(c1+c2)*(c1-c2)*c2/c 1” ;
print(c3);
cout<
說(shuō)明: c1+c2 編譯程序結(jié)實(shí)為 operator+(c1,c2), 將調(diào)用 complex operator +(complex &c1,complex &c2) 求值。
同理, c1-c2 理解為 operator –(c1,c2), 調(diào)用 complex operator –(complex &c1,complex &c2) 實(shí)現(xiàn)上述表達(dá)式的求值。

