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 +=
中的代码是错误的:它会覆盖值而不是添加)。
答
您的操作员代码非常好。您需要创建一个构造函数,接受两个整数:
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.请阅读康拉德的回答。是的,您可能想要为您的会员使用+=
而不是=
。 :)
也许他没有添加,因为他不想使用当前值,这是未定义的:) – 2009-07-07 10:57:05
值得注意的是,还需要一个默认构造函数。 – markh44 2009-07-07 10:58:22