C++运算符和参数

问题描述:

比方说,我有一个类点:C++运算符和参数

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

为什么我不能把这个作为这样的:

Point p1; 
p1 += Point(10,10); 

,是有没有办法做到这一点,同时还具有作为参数的参考?

这里有您需要的代码:

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;} 
}; 

正如康拉德指出的那样,你需要一个构造函数。你也需要明确地在你的运算符重载内执行加法。

为什么我不能把这个作为这样的:

因为你忘了声明匹配的构造函数。除此之外,这个调用看起来很好。

(此外,您的operator +=中的代码是错误的:它会覆盖值而不是添加)。

+1

也许他没有添加,因为他不想使用当前值,这是未定义的:) – 2009-07-07 10:57:05

+3

值得注意的是,还需要一个默认构造函数。 – markh44 2009-07-07 10:58:22

您的操作员代码非常好。您需要创建一个构造函数,接受两个整数:

class Point { 
public: 
    Point() : x(0), y(0) { } 
    Point(int _x, int _y) : x(_x), y(_y) { } 
// rest of the code 
}; 

请注意,如果您声明一个构造函数,需要一些参数,然后才能使实例如Point x;你需要自己声明一个默认的构造函数。

P.S.请阅读康拉德的回答。是的,您可能想要为您的会员使用+=而不是=。 :)