【发布时间】:2018-05-14 20:30:06
【问题描述】:
我试图了解使用运算符重载的短程序的输出。
输出为137,其中(2+v).print()输出13和7来自v.print();
#include <iostream>
using namespace std;
class V
{
int x;
public:
V(int a = 7, int b = 3) { x = a + b; }
void print() { cout << x; }
V operator+(int n)
{
return x++ + ++n;
}
};
V operator+(int lop, V rop)
{
return rop + lop;
}
int main()
{
V v(1, 6);
(2 + v).print();
v.print();
return 0;
}
我了解运算符重载的基本概念,我知道V rop 只是V v(1,6) 的副本,它不会改变v.print(); 的输出,其中x 保持为7,但我不明白为什么它输出 13,我总是到 10。
【问题讨论】:
-
提示:
operator+应该是const。另外,向您的rubber duck解释操作员的工作原理。 -
使构造函数
explicit发现您缺少的隐式转换。 -
我想我刚才明白了,返回 x++ + ++n;创建一个新的 V 对象,其中第一个参数是 x + ++n 的总和(我只是忽略了 x++,因为它没有任何区别),所以它创建了一个新的 V 实例,其中 a = 总和,b = 3,所以它的值是 13!对吗?
标签: c++ c++11 operator-overloading c++14