我想知道是否可以制作我的
class Time
{
public:
Time();
explicit
Time(
const double& d);
Time&
operator=(
const Time& time);
Time&
operator=(
const double& d);
};
可分配给原始双?
我使用Time作为IV很多并且需要对它进行大量的标量操作,所以它需要与通常是双倍的DV“混合”。添加第二个赋值运算符可以反过来做到这一点。
尽管如此,许多操作仍然无法实现。我一直在Time类之外编写运算符,以允许在Time和double之间进行加法,减法,乘法和除法。但由于赋值运算符不允许在类之外,我无法克服最后一个错误:
Error 1 error C2440: 'initializing' : cannot convert from 'double' to 'Time' linearfit.cpp 67
有人有过这方面的经验吗?
谢谢!
答案 0 :(得分:4)
您必须编写/覆盖运算符。在这种情况下,铸造操作员。 定义方法
operator double() { return double_however_computed_from_your_time; };
答案 1 :(得分:3)
您引用的错误似乎可能是因为您将Time(const double &d)
标记为explicit
。删除从double
到Time
的显式和隐式转换应该起作用(条件是这可能也会让它发生,而有时它不会发生)。我可能也会通过值传递double而不是const引用。
从Time转换为double将通过以下方式完成:
class Time {
// ...
operator double() const;
};
答案 2 :(得分:2)
您应声明operator double () const
以Time
兑换为double
。
没有办法为原始类型重载赋值运算符。