学校の課題のためにお金のクラスを作成しています。Moneyからdoubleへの変換を定義し、intを受け取るMoneyのコンストラクターがあり、別のコンストラクターがdoubleを取り、「+」演算子をオーバーロードして、Money型の2つのオブジェクトを足し合わせました。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)
しますが、それ以外の場合は自動変換で何が起こっているのかわかりません。誰かがこの振る舞いを説明できますか?