总结了一下课本上会出到的运算符重载
主要用于空间三维坐标的运算,复数的运算,向量的运算,集合的运算,有理数的运算。他们的特点是有多个部分数据组成,在进行加减乘除基本运算的时候应该对应计算,但是每一运算符重载的书写都有一定的格式记住一些完美的格式有利于程序的运行。
以复数计算为例
加法运算
friend Complex operator+(const Complex&c1, const Complex&c2);
注意几点:定义成友元函数,返回值类型为类类型,参数列表中为类类型的常引用,两个参数(减法同理)
定义实现:
Complex operator+( const Complex&c1,const Complex&c2)
{Complex c;
c.real=c1.real+c2.real;
c.image=c1.image+c2.image;
return c;//可以向下面一样返回到构造函数,去创建对象,也可以像这样建立一个临时对象。
}
Complex operator-(const Complex&c1,const Complex&c2)
{
double r=c1.real-c2.real;
double i=c1.image-c2.image;
return Complex(r,i);
}
输入输出运算符的重载(很容易考的知识点)
friend ostream&operator<<(ostream &output,Complex&c);
注意几点:必须写成友元函数,格式固定记住就好(输入运算符同理)
定义实现:
ostream&operator<<(ostream &output,Complex&c)
{output<<"("<<c.real<<","<<c.image<<")"<<endl;
return output;
}
主函数调用:
c=c1+c2;
cout<<c;
以向量的运算为例
显示向量中的某个值 :下表运算符重载【】
int &operator[](int i)const;
注意几点:只能定义成成员函数,返回值为类型的引用,定义成常函数
定义实现:
int&Vector::operator[](int i)const
{
return v[i];//显示数组中的某个元素
}
括号运算符重载
int operator()()const;
注意:定义成成员函数,常函数一般用它返回某个数值
赋值运算符重载=
Vector&operator=(const Vector&);
注意几点:返回类型为类类型的引用(对象赋给对象,并不等同于复制构造函数)
代码实现:
Vector&Vector::operator=(const Vector&B)
{
if(len==B.len)
{for(int i=0;i<len;i++)
v[i]=B.v[i];
return*this;}
else
{
cout<<"operator=fail!";
exit(0);
}
}
重载==,!=进行判断;
bool operator==(const Vector&)const;
bool operator!=(const Vector&)const;
注意:返回类型为bool型,参数类表中类类型的常引用,常成员函数
代码实现:
bool Vector::operator==(const Vector&B)const
{
if(len==B.len)
{
for(int i=0;i<len;i++)
{
if(v[i]!=B.v[i])
return false;
}
}
else return false;
return true;
}
bool Vector::operator!=(const Vector&)const
{
return !(*this==B);
}