成员函数:定义在类里面的函数,友元函数属于非成员函数
两种方式重载:
下面是成员函数重载和非成员函数重载的例子:
- 成员函数重载
cppCopy Codeclass Vector {
public:
Vector operator+(const Vector& v) const; // 定义 "+" 重载为成员函数
};
Vector Vector::operator+(const Vector& v) const {
Vector result; result.x = x + v.x; result.y = y + v.y; return result;
}
在上面的例子中,"+" 运算符被重载为类 Vector 的成员函数。这意味着可以用下面的方式来计算两个向量的和:
cppCopy CodeVector a, b, c;
c = a + b;
- 非成员函数重载
cppCopy Codeclass Vector {
public:
double x, y;
};
Vector operator+(const Vector& a, const Vector& b) { // 定义 "+" 重载为非成员函数
Vector result; result.x = a.x + b.x; result.y = a.y + b.y; return result;
}
在上面的例子中,"+" 运算符被重载为一个非成员函数。这意味着可以在不改变 Vector 类定义的情况下计算两个向量的和:
cppCopy CodeVector a, b, c;
c = a + b;
注意,成员函数
中无需将对象作为参数传递进来,而非成员函数
必须显式地传递需要操作的对象。成员函数重载将操作符与类紧密相连,而非成员函数重载则更灵活,可以在多个类之间共享。若x,y为private,则非成员函数无法以上述代码实现。