“多个运算符 + 与这些操作数匹配”错误

a c*_*ent 4 c++ operator-overloading type-conversion explicit-constructor implicit-conversion

我正在为学校作业创建一个货币课程。我定义了从 Money 到 double 的转换,我有一个采用 int 的 Money 构造函数,另一个构造函数采用 double,并且我已经重载了“+”运算符以将 Money 类型的两个对象加在一起。当我尝试执行类似myMoney + 10myMoney 是 Money 类型的对象且 10 显然是整数的操作时,会出现错误消息。这是其余的相关代码:

class Money {
private:
    int dollars;
    int cents;
public:
    Money(double r);
    Money(int d) : dollars(d), cents(0) {}
    operator double();
}

Money operator+(Money a, Money b) {
    double r = double(a) + double(b);
    return Money(r);
}

Money::operator double() {
    return dollars+double(cents)/100;
}

Money::Money(double r) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试并且使两个构造函数显式显示,该程序实际上可以工作Money(double(myMoney)+10),但我不确定我是否理解自动转换会发生什么。谁能解释这种行为?

Ben*_*ley 5

MyMoney + 10
Run Code Online (Sandbox Code Playgroud)

由于没有operator+(Money, int),因此必须在这里进行一些转换。编译器可以将 转换Money为 a double,然后将 10 转换为“double”并选择内置的operator+(double,double),或者可以将 转换intMoney并选择您的operator+(Money,Money).