## **运算符重载为成员函数**
运算符重载为非成员函数
#include<iostream>
using namespace std;
class ocomplex{
double real;
double image;
public:
ocomplex(double i=0.0,double j=0.0):real(i),image(j){}
friend ocomplex operator-(const ocomplex &one,const ocomplex &two);
friend ocomplex operator+(const ocomplex &one,const ocomplex &two);
friend ostream& operator<<(ostream &putout,const ocomplex &one);
};
ocomplex operator-(const ocomplex &one,const ocomplex &two)
{
return ocomplex(one.real-two.real,one.image-two.image);
}
ocomplex operator+(const ocomplex &one,const ocomplex &two)
{
return ocomplex(one.real+one.real,one.image+two.image);
}
ostream& operator<<(ostream &putout,const ocomplex &one)
{
putout<<"("<<one.real<<","<<one.image<<")";
return putout;
}
int main(void)
{
ocomplex one(5,4),two(3,2),three;
three=one+two;
cout<<"three=one+two="<<three;
return 0;
}
运算符重载为成员和非成员函数区别
- 成员函数 : 重载方式较方便
- 非成员函数 :
- 1.当操作符的第一个操作数为不可更改类型,系统类型,如ostream类型 无法向其中添加成员函数,只能设置为非成员函数
- 2.使用更加灵活,只需有一个运算符重载的目标对象就可且不论左右位置,另一个可以隐形转换。
- 成员函数使用时,左操作数必须是目的对象,且不可转换,但参数列表的参数值可以隐示转换