运算符重载是为了解决这样一类问题:我们知道对于整型可以用二元运算符(就是+,-,*,/因为这些运算都是两个变量参与,所以谓之二元,相比之下一元运算符就是自增,自减运算)直接进行运算,但对于类这样的数据结构直接的加减运算显然不被支持,这就需要用到运算符重载的概念
- 全局函数形式----返回类型 operator关键字 运算符(参数列表)
以数学中的复数为例,运算符重载可实现实部和虚部的分别相加 #include<iostream> using namespace std; class complex { public: int a; int b; public: complex(int a=0,int b=0) { this->a = a; this->b = b; } void printmyself() { cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl; } }; complex myadd(complex &c1, complex &c2) { complex temp(c1.a + c2.a,c1.b+c2.b); return temp; } complex operator+(complex &c1,complex &c2)//一个典型运算符重载 { complex temp(c1.a+c2.a,c1.b+c2.b); return temp; } void main() { //运算符重载简化 ,使得自定义数据以一种简化的方式操作 //复数,实部相加,虚部相加 //int a, b; //int c = a + b; complex c1(2, 3), c2(4, 5); complex c3; c3 = c1 + c2;//对于用户自定义数据类型C++默认情况下,不知道如何进行运算 c3.printmyself(); //运算符重载,使得用户自定义数据类型得以加载 system("pause"); }
输出结果:
- 成员函数形式
#include<iostream> using namespace std; class complex { public: int a; int b; public: complex(int a=0,int b=0) { this->a = a; this->b = b; } void printmyself() { cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl; } complex operator+(complex &c2)//左操作隐蔽不用写 { this->a = this->a + c2.a; this->b = this->b + c2.b; return *this; } }; void main() { //运算符重载简化 ,使得自定义数据以一种简化的方式操作 //复数,实部相加,虚部相加 //int a, b; //int c = a + b; complex c1(2, 3), c2(4, 5); complex c3; c3 = c1.operator+(c2);//对于用户自定义数据类型C++默认情况下,不知道如何进行运算 c3.printmyself(); //运算符重载,使得用户自定义数据类型得以加载 system("pause"); }
- 友元函数形式
#include<iostream> using namespace std; class complex { public: int a; int b; public: friend complex operator+(complex &c1, complex &c2);//可能出现的问题是这里的返回类型和下面实现的返回类型不一致,如果是复数都为复数,如果是引用则都为引用 complex(int a=0,int b=0) { this->a = a; this->b = b; } void printmyself() { cout << "我就是那个复数:" << this->a << "+" << this->b << "i" << endl; } }; complex operator+(complex &c1,complex &c2) { complex temp(c1.a + c2.a, c1.b + c2.b); return temp; } void main() { //运算符重载简化 ,使得自定义数据以一种简化的方式操作 //复数,实部相加,虚部相加 complex c1(2, 3), c2(4, 5); complex c3; c3 = c1 + c2; c3.printmyself(); system("pause"); }
来源:https://www.cnblogs.com/saintdingspage/p/12044184.html