C++运算符重载顺序

C++ operator overloading order

本文关键字:顺序 重载 运算符 C++      更新时间:2023-10-16

可能重复:
C++中的运算符重载为int+obj

我覆盖*运算符如下:

Point Point::operator *(float scale){
    Point point(this->x*scale, this->y*scale);
    return point;
}

如何修复此问题:

Point p1 (5.0, 10.0);
Point p2 = p1*4; //works fine
Point p3 = 4*p1  //error: no match for 'operator*' 

编写一个免费函数,如下所示:

Point operator *(float scale, Point p)
{
    return p * scale;
}

您将运算符重载为一个自由函数,并提供它的两个版本,而不是将其重载为成员函数。

Point operator *(float scale, Point p);
Point operator *(Point p, float scale);

有了这些:

第1个版本支持:

Point p3 = 4*p1;

第二个版本支持:

Point p2 = p1*4;