💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 23. 重载运算符和重载函数 C++ 允许在同一作用域中的某个**函数**和**运算符**指定多个定义,分别称为**函数重载**和**运算符重载**。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个**重载函数**或**重载运算符**时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为**重载决策**。 **函数重载:** ~~~ //1. 在 .h 文件中定义 DevYK 对象 class DevYK { public: int length; DevYK(); ~DevYK(); void setLength(int len); int getLength(); }; //2. .cpp 实现 DevYK::DevYK() { cout << "执行 DevYK 空参构造函数" << endl; } DevYK::~DevYK() { cout << "DevYK 销毁" << endl; } void DevYK::setLength(int len) { this->length = len; } int DevYK::getLength() { return this->length; } //3. 测试 void test21() { //1.运算符重载 DevYK devYkA; DevYK devYkB; DevYK devYkC; //进行初始化赋值 devYkA.setLength(500); devYkB.setLength(20); cout << "devYkA length : " << devYkA.getLength() << endl; cout << "devYkB length : " << devYkB.getLength() << endl; }; 复制代码 ~~~ > **输出:** > > devYkA length : 500 devYkB length : 20 **运算符重载:** 您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 ~~~ DevYK operator+(const DevYK &b); 复制代码 ~~~ 下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 **this** 运算符进行访问,如下所示: ~~~ //1. 在 .h 文件中定义 DevYK 对象 class DevYK { public: int length; DevYK(); ~DevYK(); void setLength(int len); int getLength(); DevYK operator+(const DevYK &b); }; //2. .cpp 实现 DevYK::DevYK() { cout << "执行 DevYK 空参构造函数" << endl; } DevYK::~DevYK() { cout << "DevYK 销毁" << endl; } void DevYK::setLength(int len) { this->length = len; } int DevYK::getLength() { return this->length; } // 重载 + 运算符,用于把两个 Box 对象相加 class DevYK DevYK::operator+(const class DevYK &b) { DevYK devYk; devYk.length = this->length + b.length; return devYk; } //3. 测试: void test21() { //1.运算符重载 DevYK devYkA; DevYK devYkB; DevYK devYkC; //进行初始化赋值 devYkA.setLength(500); devYkB.setLength(20); cout << "devYkA length : " << devYkA.getLength() << endl; cout << "devYkB length : " << devYkB.getLength() << endl; devYkC = devYkA + devYkB; cout << "DevYK 运算符重载 = " << devYkC.getLength() << endl; }; 复制代码 ~~~ > **输出:** > > devYkA length : 500 devYkB length : 20 > > DevYK 运算符重载 = 520