C++运算符和参数

And*_*eas 3 c++ operator-overloading

假设我有一个课程点:

class Point {
    int x, y;
public:
    Point& operator+=(const Point &p) { x=p.x; y=p.y; return *this; }
};
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样称呼它:

Point p1;
p1 += Point(10,10);
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,同时仍然有参考作为参数?

Kon*_*lph 11

为什么我不能这样称呼它:

因为你忘了声明一个匹配的构造函数.除此之外,这个电话看起来很好.

(此外,你内部的代码operator +=是错误的:它会覆盖值而不是添加).

  • 值得注意的是,还需要一个默认构造函数. (3认同)

Dav*_*ble 8

这是您需要的代码:

class Point {
    int x,y;
public:
    Point(int x=0,int y=0) : x(x), y(y) {}
    Point& operator+=(const Point&p) {x+=p.x;y+=p.y;return *this;}
};
Run Code Online (Sandbox Code Playgroud)

正如康拉德指出的那样,你需要一个构造函数.您还需要在运算符重载中明确执行添加.