【发布时间】:2012-05-07 18:15:29
【问题描述】:
我正在为学校作业创建一个 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) 并且如果我明确两个构造函数,该程序实际上可以工作,但我不确定我是否理解自动转换发生了什么。谁能解释这种行为?
【问题讨论】:
-
您在这里只显示了一个
operator+。你还有一个吗? -
不,这是我写的唯一的
operator+。 -
Otero 运算符在语言中定义
标签: c++ operator-overloading type-conversion implicit-conversion explicit-constructor