我想知道是否有可能让我的
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
有人有这方面的经验吗?
谢谢!
你必须编写/重写一个操作符。在这种情况下,演员。 定义一个方法
operator double() { return double_however_computed_from_your_time; };
您应该声明
operator double () const
以使Time
可转换为double
。
无法重载原始类型的赋值运算符。
您引用的错误似乎可能是由于将您的
Time(const double &d)
标记为explicit
。删除从 double
到 Time
的显式和隐式转换应该可以工作(条件是这也可能让它在您不希望它发生的时候发生)。我可能还会按值而不是 const 引用传递 double。
从 Time 转换为 double 将通过以下方式完成:
class Time {
// ...
operator double() const;
};