C++的操作运算符重载:以复数加法为例

2023-12-26 11:41:19

C++的操作运算符重载

在C++中,重载操作运算符是一种为类或结构体创建新版本的运算符的方法,以便它们可以用于自定义数据类型。运算符重载可以让其他程序员以直观的方式使用自定义类型,使其表现得像内置类型一样。重载一个运算符时,实际上是在定义一个函数,该函数指定了当该运算符用于自定义类型时应该执行的操作。运算符重载的函数可以是成员函数或非成员函数(通常是友元函数)。以下是一些相关的基本概念:

  • 运算符函数的名称:运算符函数的名称由关键字 operator 后跟要重载的运算符符号组成。例如,重载加法运算符的函数名为
    operator+。
  • 运算符的参数:重载运算符的函数参数代表了运算符的操作数。例如,二元运算符需要两个参数,如果是成员函数,则第一个操作数是调用对象本身,第二个参数是作为函数参数传递的。
  • 返回类型:运算符重载函数的返回类型应该与运算符的预期结果相匹配。
  • 运算符的重载限制:并不是所有的运算符都可以被重载。例如,.、.*、::、?: 和 sizeof
    不能被重载。同时,运算符重载不能改变运算符的优先级。

语法

ReturnType operatorOp(Type &argument);

其中:

ReturnType 是运算符函数返回的数据类型。
operator 是一个关键字,表明这是一个运算符重载函数。
Op 是要重载的运算符。
Type &argument 是传递给运算符的参数(如果运算符是二元的,则可能有两个参数)。

运算符可以是成员函数或非成员函数(即全局函数)。如果运算符是成员函数,它的第一个参数隐式地是*this对象的引用。例如:

class MyClass {
public:
    MyClass& operator=(const MyClass &rightOperand) {
        // 赋值逻辑
        // 返回*this以支持链式赋值
        return *this;
    }
};

例子:复数加法

现在给出一个简单的例子,演示如何为一个表示复数的类重载加法运算符:

#include <iostream>

// 复数类
class Complex {
public:
    double real;   // 实部
    double imag;   // 虚部

    // 构造函数
    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);
    }

    // 打印复数
    void print() const {
        std::cout << "(" << real << ", " << imag << "i)" << std::endl;
    }
};

int main() {
    Complex c1(1.0, 2.0);
    Complex c2(2.0, 3.0);

    // 使用重载的加法运算符
    Complex c3 = c1 + c2;

    // 打印结果
    c3.print();  // 输出: (3, 5i)

    return 0;
} 

在这个例子中,我们定义了一个 Complex 类来表示复数,并重载了加法运算符 +。重载的 operator+ 函数接受一个 Complex 对象作为参数,并返回两个复数相加的结果。在 main 函数中,我们创建了两个 Complex 对象并使用 + 运算符将它们相加,然后打印出结果。由于我们重载了 + 运算符,因此可以直接使用 c1 + c2 来计算两个复数的和。

文章来源:https://blog.csdn.net/qq_46348508/article/details/135216556
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。