MST

星途 面试题库

面试题:C++ 中运算符重载的基本实现及应用场景

请简述在C++中如何重载二元运算符(以 + 为例),并说明运算符重载在实际项目中有哪些常见的应用场景。要求给出简单的代码示例。
11.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

重载二元运算符 + 的方法

在C++ 中,可以通过成员函数或友元函数来重载二元运算符 +

  1. 使用成员函数重载: 成员函数重载 + 运算符时,第一个操作数是调用该函数的对象,第二个操作数作为参数传递。
class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}
    MyClass operator+(const MyClass& other) const {
        return MyClass(value + other.value);
    }
    int getValue() const {
        return value;
    }
};
  1. 使用友元函数重载: 友元函数重载 + 运算符时,两个操作数都作为参数传递。
class MyClass {
private:
    int value;
public:
    MyClass(int v) : value(v) {}
    friend MyClass operator+(const MyClass& a, const MyClass& b);
    int getValue() const {
        return value;
    }
};
MyClass operator+(const MyClass& a, const MyClass& b) {
    return MyClass(a.value + b.value);
}

运算符重载常见应用场景

  1. 自定义数据类型的运算: 比如实现自定义的向量(Vector)类,使向量之间可以进行加法运算,就像数学中的向量加法一样。
class Vector {
private:
    double x, y;
public:
    Vector(double a, double b) : x(a), y(b) {}
    Vector operator+(const Vector& other) const {
        return Vector(x + other.x, y + other.y);
    }
    double getX() const { return x; }
    double getY() const { return y; }
};
  1. 流操作符重载: 用于自定义数据类型的输入输出,使代码更简洁直观。
class Point {
private:
    int x, y;
public:
    Point(int a, int b) : x(a), y(b) {}
    friend std::ostream& operator<<(std::ostream& os, const Point& p) {
        os << "(" << p.x << ", " << p.y << ")";
        return os;
    }
};
  1. 矩阵运算: 实现矩阵类时,重载 + 运算符实现矩阵相加,以及重载 * 运算符实现矩阵相乘等。
class Matrix {
private:
    int data[3][3];
public:
    Matrix() {
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                data[i][j] = 0;
            }
        }
    }
    Matrix operator+(const Matrix& other) const {
        Matrix result;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                result.data[i][j] = data[i][j] + other.data[i][j];
            }
        }
        return result;
    }
};