如何使类可分配给基元?

问题描述 投票:0回答:3

我想知道是否有可能让我的

class Time
{
    public:
        Time();

        explicit
        Time(
            const double& d);

        Time&
        operator=(
            const Time& time);

        Time&
        operator=(
            const double& d);
};

可分配给原始双精度值?

我经常将时间用作 IV,需要对其进行大量标量运算,因此它需要与通常是普通双打的 DV“混合”。添加第二个赋值运算符反过来起到了作用。

尽管如此,很多操作仍然是不可能的。我一直在 Time 类之外编写运算符,以允许在 Time 和 double 之间进行加法、减法、乘法和除法。但是由于赋值运算符不允许在类外使用,所以我无法克服最后一个错误:

Error   1   error C2440: 'initializing' : cannot convert from 'double' to 'Time'    linearfit.cpp   67

有人有这方面的经验吗?

谢谢!

c++ operator-overloading variable-assignment primitive
3个回答
5
投票

你必须编写/重写一个操作符。在这种情况下,演员。 定义一个方法

operator double() { return double_however_computed_from_your_time; };

3
投票

您应该声明

operator double () const
以使
Time
可转换为
double
。 无法重载原始类型的赋值运算符。


3
投票

您引用的错误似乎可能是由于将您的

Time(const double &d)
标记为
explicit
。删除从
double
Time
的显式和隐式转换应该可以工作(条件是这也可能让它在您不希望它发生的时候发生)。我可能还会按值而不是 const 引用传递 double。

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

class Time { 
// ...
     operator double() const;
};
© www.soinside.com 2019 - 2024. All rights reserved.