我正在为学校作业创建一个 Money 课程。我已经定义了从 Money 到 double 的转换,我有一个 Money 的构造函数,它接受一个 int,另一个构造函数接受一个 double,并且我重载了“+”运算符以将两个 Money 类型的对象相加。当我尝试执行类似myMoney + 10
myMoney 是 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) {
...
}
如果我尝试Money(double(myMoney)+10)
并且如果我明确两个构造函数,该程序实际上可以工作,但我不确定我是否理解自动转换发生了什么。谁能解释这种行为?