a c*_*ent 4 c++ operator-overloading type-conversion explicit-constructor implicit-conversion
我正在为学校作业创建一个货币课程。我定义了从 Money 到 double 的转换,我有一个采用 int 的 Money 构造函数,另一个构造函数采用 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) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试并且使两个构造函数显式显示,该程序实际上可以工作Money(double(myMoney)+10)
,但我不确定我是否理解自动转换会发生什么。谁能解释这种行为?
MyMoney + 10
Run Code Online (Sandbox Code Playgroud)
由于没有operator+(Money, int)
,因此必须在这里进行一些转换。编译器可以将 转换Money
为 a double
,然后将 10 转换为“double”并选择内置的operator+(double,double)
,或者可以将 转换int
为Money
并选择您的operator+(Money,Money)
.
归档时间: |
|
查看次数: |
16195 次 |
最近记录: |