设为首页 加入收藏

TOP

二级C++多态性:运算符重载中的两种形式
2014-11-19 06:17:41 】 浏览:1716
Tags:二级 多态性 运算 重载 形式

1 重载为类的成员函数:


格式: < 类名 > operator < 运算符 >(< 参数表 >)


例如:利用重载运算符实现复数类对象的算术四则运算。


#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<



说明:①程序中的表达式: c1+c2 ,编译程序将解释 c1.operator+(c2)


   ②当重载成为成员函数时,双目运算符仅有一个参数。对单目运算符,重载为成员函数时,总是隐含了一个 参数,该参数是 this 指针。 This 指针指向调用该成员函数对象的指针。


2、重载为友员函数:


  当重载友员函数时,将没有隐含的参数 this 指针。这样,对双目运算符,友员函数有2个参数,对单目运算符,友员函数有一个参数。


格式: friend < 类型说明符 >operaotr < 运算符 >(< 参数表 >)


{……..}


例如:重写上例:


#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<



说明: c1+c2 编译程序结实为 operator+(c1,c2), 将调用 complex operator +(complex &c1,complex &c2) 求值。


同理, c1-c2 理解为 operator (c1,c2), 调用 complex operator (complex &c1,complex &c2) 实现上述表达式的求值。


3 、两种重载形式的比较:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二级C++多态性:多态性和虚函数 下一篇二级C++多态性:运算符重载中的几..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目