C++ 运算符重载规则

2024 年 8 月 29 日 | 4 分钟阅读

在本文中,您将学习 C++ 中运算符重载的规则。C++ 中有几条运算符重载的规则。一些主要规则如下

1. 语法

通过定义一个函数来定义运算符重载,该函数使用 operator 关键字,后跟要重载的运算符。

例如

2. 逻辑和一致的实现

重载的运算符 的实现应在逻辑上与相应内置运算符的预期行为保持一致。

避免以可能导致混淆或意外行为的方式重载运算符。

3. 操作数数量

大多数一元二元运算符都可以被重载。

一元运算符接受一个操作数(例如,+, -, ++, --)。

二元运算符接受两个操作数(例如,+, -, *, /)。

4. 优先级和结合性

相关内置运算符的优先级结合性会传递给重载运算符。

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

5. 操作数和返回类型

重载运算符的操作数必须至少有一个是用户定义类型。

对于赋值运算符,返回类型通常应是对类或类类型的引用。

6. 重载限制

有些运算符不能被重载,或者它们的行为不能被显著改变。例如,(成员访问)、.*(成员指针访问)、::(作用域解析)、?:(三元条件)、 sizeoftypeid

7. 作为成员函数重载

当作为成员函数重载时,左操作数隐式地是调用对象。

二元运算符必须至少有一个操作数是用户定义类型。

示例

8. 作为非成员函数重载

当作为非成员函数重载时,两个操作数都作为参数提供。

示例

9. 友元函数重载

如果需要访问私有成员,也可以使用友元函数来处理运算符重载。

示例

10. 常见的重载运算符

一些常见的重载运算符包括 +, -, *, /, %, ==, !=, <, >, <=, >=, +=, -=, *=, /=, ++, --, =, << 和 >>。

11. 重载 << 用于输出

重载 << 允许您定义如何使用 std::cout 显示您的类的对象。

示例

示例

输出

Complex Number 1: 2.5 + 3.5i
Complex Number 2: 1.5 + 2.5i
Sum: 4 + 6i

说明

1. 类(Complex)的定义

  • 在此示例中,'Complex' 类表示具有实部和虚部的复数。
  • 它有一个公共构造函数和两个私有数据成员 'real''imag' 用于初始化。

2. 重载运算符 +(成员函数)

  • '+' 运算符被重载为 Complex 类的成员函数。
  • 该函数的参数是对另一个 Complex 对象(other)的引用。
  • 将相关的实部和虚部相加,生成一个新的 Complex 对象(result)。

3. 重载运算符 <<(友元函数)

  • << 运算符 被重载为友元函数,以改变输出格式。
  • 它需要两个引用:一个 Complex 对象 (obj) 和一个 std::ostream& 引用 (os)
  • 实部和虚部以指定的格式打印到输出流中。

4. 主函数

  • 创建了两个具有初始值的 Complex 对象(c1c2)。
  • '+' 运算符将 c1 和 c2 相加;结果存储在 sum 变量中。
  • << 运算符 显示复数及其和。

5. 输出

  • 执行时,程序以预定格式输出复数及其总和。