C++ 类运算符重载
这是一个非常基本的运算符重载问题。 比如说我上过这样的课C++ 类运算符重载,c++,class,overloading,C++,Class,Overloading,这是一个非常基本的运算符重载问题。 比如说我上过这样的课 class xy { public: double x, y; XY(double X, double Y) { x = X; y = Y;} XY operator+(const XY & add) const { return XY(this->x + add.x, this->y + add.y); } XY & operator+=(con
class xy
{
public:
double x, y;
XY(double X, double Y) { x = X; y = Y;}
XY operator+(const XY & add) const {
return XY(this->x + add.x, this->y + add.y);
}
XY & operator+=(const XY & add) const {?}
}
}
我想让操作符+=做它应该做的事情(你知道,加上x和y的当前值)。运算符+和运算符+=”的代码是否相同?是的,执行添加操作(坚持使用+=
运算符),然后返回对自身的引用。哦,这不可能是一个const
方法
XY & operator+=(const XY & add) {
this->x += add.x;
this->y += add.y;
return *this;
}
是的,执行add操作(坚持使用+=
操作符),并返回对自身的引用。哦,这不可能是一个const
方法
XY & operator+=(const XY & add) {
this->x += add.x;
this->y += add.y;
return *this;
}
否。通常,
运算符+
将结果存储在新对象中并按值返回,而运算符+=
将右侧添加到*此
并通过引用返回*此
这两个运算符是相关的,通常可以彼此实现,但它们具有不同的语义,因此不能有相同的实现。否。按照惯例,
运算符+
将结果存储在新对象中,并按值返回,而操作符+=
将右侧添加到*this
并通过引用返回*this
这两个操作符是相关的——通常可以彼此实现——但它们的语义不同,因此不能有相同的实现。怎么可能相同?他们做不同的事情 如果您不关心优化,可以在
+
操作符实现中使用+=
:
XY operator + (const XY& right) const
{
XY left(*this);
left += right;
return left;
}
怎么会是一样的呢?他们做不同的事情 如果您不关心优化,可以在
+
操作符实现中使用+=
:
XY operator + (const XY& right) const
{
XY left(*this);
left += right;
return left;
}
哈哈,当我试图更改“this”指向的任何东西时,“const”把我搞砸了哈哈,当我试图更改“this”指向的任何东西时,“const”把我搞砸了,只要你将它们声明为内联函数(就像它们在类中定义时自动发生的那样)它甚至不应该降低性能。@LeftAround它取决于复制构造函数的实现。调用默认构造函数并手动构造值可能会更快。对。我指的是这个只有两个双变量的特定类,其中默认构造函数+手动赋值不应该比复制构造函数快。当然,这并不适用于所有类。只要将它们声明为内联函数(就像它们在类中定义时自动声明),它甚至不会降低性能。@LeftAround它取决于复制构造函数的实现。调用默认构造函数并手动构造值可能会更快。对。我指的是这个只有两个双变量的特定类,其中默认构造函数+手动赋值不应该比复制构造函数快。当然,这并不适用于所有类。我喜欢本教程:我建议使用boost操作符库来实现这种操作符重载。它允许您定义最小操作集(+=在本例中),然后自动填充其他操作集(如运算符+)。我喜欢本教程:我建议使用boost运算符库来实现这种运算符重载。它允许您定义最小操作集(+=在本例中),然后自动填写其他操作集(如运算符+)。