【发布时间】:2016-03-02 05:52:46
【问题描述】:
我有一个任务,我们应该使用父/子类重载运算符,并且我想将父对象转换为子对象。所以就像船 + 飞机 = 水上飞机。
一个实现示例:
seaPlane plane::operator+=(boat rhs)
{
seaPlane temp;
temp.displacement = rhs.displacement;
// etc...
*this = temp;
return *this;
}
我在这里遇到两个错误:它说船数据成员不可访问,并且“不存在合适的用户定义转换......”。
知道我将对象存储在异构集合中也可能很有用。
【问题讨论】:
-
您确定需要重载 += 运算符而不仅仅是 + 吗?顺便说一句,如果这些车辆有一个共同的基类,那么您也许可以为您的收藏使用更简单的容器。
-
如果我们超载 + 而不是 += ,教练会为了保持一致性而叮嘱我们。这就是这个练习的主要目的。另外,我在重载 + 中遇到了相同的(第一个)错误。此外,异构集合是使用继承的主要原因之一。
-
这对你的导师来说似乎是一件很奇怪的事情,你已经偶然发现了原因。您不能分配给“this”指针,因为它是纯右值并且不能分配给(除非重新定义分配以执行其他操作)。 += 运算符旨在累积而不是重新定义,因此这似乎是对它应该做的事情的错误操作。您能否向我们提供有关要求的更多信息?您应该逐字发布它们,以便我们帮助解释它们。
标签: c++ type-conversion operator-overloading parent-child