面试题答案
一键面试重载二元运算符 +
的方法
在C++ 中,可以通过成员函数或友元函数来重载二元运算符 +
。
- 使用成员函数重载:
成员函数重载
+
运算符时,第一个操作数是调用该函数的对象,第二个操作数作为参数传递。
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;
}
};
- 使用友元函数重载:
友元函数重载
+
运算符时,两个操作数都作为参数传递。
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);
}
运算符重载常见应用场景
- 自定义数据类型的运算: 比如实现自定义的向量(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; }
};
- 流操作符重载: 用于自定义数据类型的输入输出,使代码更简洁直观。
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;
}
};
- 矩阵运算:
实现矩阵类时,重载
+
运算符实现矩阵相加,以及重载*
运算符实现矩阵相乘等。
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;
}
};