【发布时间】:2014-06-11 01:31:12
【问题描述】:
作为前言,这是作业,我不是在寻找答案,只是一个小小的方向,因为我无法向实验室导师寻求帮助。我的问题是我已经获得了无法更改的预定义类声明。我有 2 个时间对象需要添加以等于第 3 个时间对象。
time3 = time2 + time1;
我的重载函数是这样的
Time Time :: operator + (const Time time2)
{
Time::addSeconds(time1.second);
Time::addMinutes(time1.minute);
Time::addHours(time1.hour); //changes hrs and days
return *this;
};
所以我在 time1 中添加,在我的 add 函数中,我使用 *this 运算符分配将 time2 转换为 time1 等于的任何值。所以这行不通。如果我可以更改我的类定义,我知道该怎么做,但我不能。我想我的意图是 *this 指的是 time3,但它指的是等式的左侧。
如何在不改变类结构的情况下使我的 add 函数中的结果等于 time3?
我找不到任何资源来显示处理这种情况的正确方法,但如果你有任何资源,我会很乐意通读它们。
【问题讨论】:
-
*this绝对不是运算符。你应该使用operator+=来实现operator+。 -
time1 是从哪里来的?另外,这门课不需要课本吗?
-
您在询问之前尝试过搜索吗?这是 Stack Overflow 上关于重载运算符的一篇很好的文章:stackoverflow.com/a/4421719/3651800。网上也有不少资料
-
1.该运算符应该是
const。 2.它不应该对对象本身进行操作。 -- 它应该构造一个临时值并返回它。 3. 没有名为time1的变量。 4. 考虑传递常量引用而不是值传递。 -
链接的问题有你需要的一切。尤其是 算术运算符 小节 二元算术运算符 下的最佳答案得到了您需要的一切。
标签: c++ overloading operator-keyword