目录
运算符重载背景(operator)
定义
重载的方法
不能重载的运算符
运算符重载注意事项
代码实现
运行结果
运算符重载背景(operator)
自定义的类中,系统默认只提供两个运算符供用户使用,分别是赋值运算符(=)和取地址运算符(&),其余运算符只使用用基本数据类型,对于构造数据类型而言,不可直接使用,除非将该运算符进行重载操作.
定义
运算符重载是静态多态的一种,能够实现“一符多用”,使用运算符重载,能够完成运算符作用于类对象之间,使得代码更加简洁、可读性更强。
重载的方法
operator# (#表示运算符号)
不能重载的运算符
1> 成员运算符 .
2> 成员指针运算符 .*
3> 作用域限定符 ::
4> 求字节运算符 sizeof
5> 三目运算符 ?:
运算符重载注意事项
1> 运算符重载,不能改变运算符的优先级
2> 运算符重载,不能改变运算符操作数个数
3> 运算符重载,不能更改运算符的本质逻辑,如不允许在加法运算符重载函数中,实现加法
4> 运算符重载,不能自己造运算符,是在已有的运算符的基础上进行重载操作
5> 运算符重载,不能改变运算符的结合律
6> 运算符重载,一般不设置默认参数
代码实现
#include <iostream>
using namespace std;
//定义一个复数类
class Complex
{
private:
int real; //实部
int vir; //虚部
public:
Complex(){}
Complex(int r,int v):real(r),vir(v){}
//定义展示函数
void show()
{
if(vir>=0)
{
cout<<real<<" + "<<vir<<"i"<<endl;
}else
{
cout<<real<<vir<<"i"<<endl;
}
}
//成员函数版实现减法(-)运算符重载
const Complex operator- (const Complex &R)
{
Complex c;
c.real=this->real-R.real;
c.vir=this->vir-R.vir;
return c;
}
//重载:+= 实部+=实部 虚部+=虚部
Complex & operator+=(const Complex &R)
{
this->real+=R.real;
this->vir+=R.vir;
return *this;
}
//重载:-=
Complex & operator-=(const Complex &R)
{
this->real-=R.real;
this->vir-=R.vir;
return *this;
}
//重载中括号[]运算符
int & operator[](int index)
{
if(index==0)
{
return real;
}
else if(index==1)
{
return vir;
}
}
//重载前置自增运算符重载函数:实部 = 实部+1 虚部=虚部+1
Complex &operator++()
{
++this->real;
++this->vir;
return *this;
}
//重载后置自增运算符重载函数:实部 = 实部+1 虚部=虚部+1
Complex operator++(int)
{
Complex c;
c.real = this->real++;
c.vir = this->vir++;
return c;
}
};
int main()
{
Complex c1(5,3);
Complex c2(2,1);
c1.show(); //测试
Complex c3=c1-c2;
c3.show();
Complex c4=c1+=c2; //测试+=
c4.show();
Complex c5=c1-=c2;
c5.show();
c5[0]=10; //将实部参数进行修改
c5.show();
Complex c6=++c1; //测试自增
c6.show();
Complex c7=c2++;;
c7.show();
return 0;
}