如何将类分配给基元?或者,我如何制作标量类?

时间:2011-04-02 15:58:15

标签: c++ operator-overloading variable-assignment primitive

我想知道是否可以制作我的

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

有人有过这方面的经验吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

您必须编写/覆盖运算符。在这种情况下,铸造操作员。 定义方法

operator double() { return double_however_computed_from_your_time; };

答案 1 :(得分:3)

您引用的错误似乎可能是因为您将Time(const double &d)标记为explicit。删除从doubleTime的显式和隐式转换应该起作用(条件是这可能也会让它发生,而有时它不会发生)。我可能也会通过值传递double而不是const引用。

从Time转换为double将通过以下方式完成:

class Time { 
// ...
     operator double() const;
};

答案 2 :(得分:2)

您应声明operator double () constTime兑换为double。 没有办法为原始类型重载赋值运算符。