目录
运算符重载背景(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 虚部=虚部+1Complex &operator++(){++this->real;++this->vir;return *this;}//重载后置自增运算符重载函数:实部 = 实部+1 虚部=虚部+1Complex 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;
}