【发布时间】:2015-11-08 11:42:02
【问题描述】:
point.h
...
Point operator +=(double & left, const Point & right) {
return Point(left + right.x, left + right.y, left + right.z);
}
// std::ostream is overloaded
...
main.cpp
#include <iostream>
#include "point.h"
int main() {
double a = 1.0;
Point b(1.0, 1.0, 1.0);
a += b;
std::cout << a << std::endl;
}
输出:
1
我想返回总和:
(2, 2, 2)
但是复合赋值时编译器会保留双精度类型。
【问题讨论】:
-
a是双精度数。cout << a << endl;不可能返回(2, 2, 2)。此外,+=应该修改 LHS 操作数,而不是创建具有不同类型的新对象。 -
您真正想做的是在 += 运算符中交换操作数,修改其中的现有点而不是创建新点,并在 main.cpp 中使用 b += a。跨度>
-
@Danilo 显示类定义。
-
你搞混了。变量不能在 C++ 中改变它们的类型;一旦
a是双倍,它总是双倍。也许你的意思是Point c = a + b;
标签: c++ class type-conversion operator-overloading compound-assignment