🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 简介 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 **本质是函数调用,编译器去调用.** 这种函数统一名字叫operator 语法: 定义重载的运算符就像定义函数,只是该函数的名字是operator@,这里的@代表了被重载的运算符。函数的参数中参数个数取决于两个因素。 * 运算符是一元(一个参数)的还是二元(两个参数); * 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函数(对于一元没有参数,对于二元是一个参数-此时该类的对象用作左耳参数)'' **对于内置的数据类型的表示总的所有运算符是不可能改变的** ~~~ #define _CRT_SECURE_NO_WARNINGS #include <string> #include <iostream> using namespace std; class Maker { public: Maker(int id, int age) { this->id = id; this->age = age; } Maker operator+(Maker &m) { Maker temp(this->id + m.id, this->age + m.age); return temp; } public: int id; int age; }; //Maker operator+(Maker &p1, Maker &p2) //{ // Maker temp(p1.id + p2.id, p1.age + p2.age); // return temp; //} void test01() { Maker m1(1, 20); Maker m2(2, 22); Maker res = m1 + m2; cout << "id: " << res.id << " age: " << res.age << endl; } int main() { test01(); system("pause"); return EXIT_SUCCESS; } ~~~ # 可重载的操作符 几乎C中所有的运算符都可以重载,但运算符重载的使用时相当受限制的。特别是不能使用C中当前没有意义的运算符(例如用**求幂)不能改变运算符优先级,不能改变运算符的参数个数。这样的限制有意义,否则,所有这些行为产生的运算符只会混淆而不是澄清寓语意。 ![](https://img.kancloud.cn/28/ea/28ea59ff968da042d488372b80667f10_698x374.png) **除了赋值(=)外, 基类中被重载的操作符都将被派生类继承** 特殊运算符: ![](https://img.kancloud.cn/5b/d5/5bd5995da73f1c0e14c840162777a599_481x195.png) ![](https://img.kancloud.cn/65/ba/65ba9fdcedfa34108270f55ac101f678_696x230.png)