c++重载操作符(c++重载operator)

## C++ 重载操作符### 简介C++ 中的运算符重载允许我们为用户定义的类型(例如类)重新定义运算符(例如 +、-、

、/ 等)的行为。这使得我们可以像使用内置类型一样,以更直观、更简洁的方式使用自定义类型。### 重载操作符的规则

不能创建新的运算符,只能重载现有的运算符。

不能改变运算符的优先级和结合性。

不能改变运算符操作数的数量。

至少有一个操作数必须是用户定义的类型。### 重载操作符的方法C++ 中使用

operator

关键字来重载运算符,其语法如下:```cpp return_type operator operator_symbol (arguments) {// operator implementation } ```

return_type

: 操作符重载函数的返回类型。

operator

: 关键字,用于表明这是一个运算符重载函数。

operator_symbol

: 要重载的运算符符号。

arguments

: 操作符的参数列表。### 重载操作符的分类#### 1. 使用成员函数重载当使用成员函数重载运算符时,该运算符的左操作数必须是该类的对象。```cpp class Complex {private:double real;double imag;public:Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}// 使用成员函数重载 + 运算符Complex operator+(const Complex& other) const {return Complex(real + other.real, imag + other.imag);}// 其他成员函数... };int main() {Complex c1(2, 3), c2(4, 5);Complex c3 = c1 + c2; // 调用重载的 + 运算符// ... } ```#### 2. 使用友元函数重载当使用友元函数重载运算符时,运算符的左操作数可以是该类的对象,也可以是其他类型。```cpp class Complex {private:double real;double imag;public:Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}// 声明友元函数friend Complex operator-(const Complex& c1, const Complex& c2);// 其他成员函数... };// 定义友元函数 Complex operator-(const Complex& c1, const Complex& c2) {return Complex(c1.real - c2.real, c1.imag - c2.imag); }int main() {Complex c1(2, 3), c2(4, 5);Complex c3 = c1 - c2; // 调用重载的 - 运算符// ... } ```### 常用运算符的重载

算术运算符 (+, -,

, /, %)

: 用于实现自定义类型的算术运算。

关系运算符 (==, !=, >, <, >=, <=)

: 用于比较自定义类型的对象。

逻辑运算符 (&&, ||, !)

: 用于实现自定义类型的逻辑运算。

赋值运算符 (=, +=, -=,

=, /=, %=)

: 用于为自定义类型实现赋值操作。

递增/递减运算符 (++/--)

: 用于实现自定义类型的递增和递减操作。

流插入/提取运算符 (<< / >>)

: 用于自定义类型的输入和输出操作。### 总结C++ 运算符重载为我们提供了很大的灵活性,可以使我们以更直观、更简洁的方式使用自定义类型。但是,过度使用运算符重载可能会降低代码的可读性和可维护性,因此我们需要谨慎使用。

C++ 重载操作符

简介C++ 中的运算符重载允许我们为用户定义的类型(例如类)重新定义运算符(例如 +、-、*、/ 等)的行为。这使得我们可以像使用内置类型一样,以更直观、更简洁的方式使用自定义类型。

重载操作符的规则* 不能创建新的运算符,只能重载现有的运算符。 * 不能改变运算符的优先级和结合性。 * 不能改变运算符操作数的数量。 * 至少有一个操作数必须是用户定义的类型。

重载操作符的方法C++ 中使用 **operator** 关键字来重载运算符,其语法如下:```cpp return_type operator operator_symbol (arguments) {// operator implementation } ```* **return_type**: 操作符重载函数的返回类型。 * **operator**: 关键字,用于表明这是一个运算符重载函数。 * **operator_symbol**: 要重载的运算符符号。 * **arguments**: 操作符的参数列表。

重载操作符的分类

1. 使用成员函数重载当使用成员函数重载运算符时,该运算符的左操作数必须是该类的对象。```cpp class Complex {private:double real;double imag;public:Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}// 使用成员函数重载 + 运算符Complex operator+(const Complex& other) const {return Complex(real + other.real, imag + other.imag);}// 其他成员函数... };int main() {Complex c1(2, 3), c2(4, 5);Complex c3 = c1 + c2; // 调用重载的 + 运算符// ... } ```

2. 使用友元函数重载当使用友元函数重载运算符时,运算符的左操作数可以是该类的对象,也可以是其他类型。```cpp class Complex {private:double real;double imag;public:Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}// 声明友元函数friend Complex operator-(const Complex& c1, const Complex& c2);// 其他成员函数... };// 定义友元函数 Complex operator-(const Complex& c1, const Complex& c2) {return Complex(c1.real - c2.real, c1.imag - c2.imag); }int main() {Complex c1(2, 3), c2(4, 5);Complex c3 = c1 - c2; // 调用重载的 - 运算符// ... } ```

常用运算符的重载* **算术运算符 (+, -, *, /, %)**: 用于实现自定义类型的算术运算。 * **关系运算符 (==, !=, >, <, >=, <=)**: 用于比较自定义类型的对象。 * **逻辑运算符 (&&, ||, !)**: 用于实现自定义类型的逻辑运算。 * **赋值运算符 (=, +=, -=, *=, /=, %=)**: 用于为自定义类型实现赋值操作。 * **递增/递减运算符 (++/--)**: 用于实现自定义类型的递增和递减操作。 * **流插入/提取运算符 (<< / >>)**: 用于自定义类型的输入和输出操作。

总结C++ 运算符重载为我们提供了很大的灵活性,可以使我们以更直观、更简洁的方式使用自定义类型。但是,过度使用运算符重载可能会降低代码的可读性和可维护性,因此我们需要谨慎使用。

Powered By Z-BlogPHP 1.7.2

备案号:蜀ICP备2023005218号