2026-09-16
fahrenheit.cpp
class Fahrenheit {
public:
// write this: a constructor from a double (the degree value) that
// forbids `Fahrenheit t = 98.6;` (implicit conversion) while still
// allowing `Fahrenheit t(98.6);` and `Fahrenheit t{98.6};`
double degrees;
};
Fahrenheitのコンストラクタを書いてください。doubleからFahrenheitへの暗黙の変換(コピー初期化)は禁止し、直接初期化・リスト初期化だけを許すこと。
Reference
class Fahrenheit {
public:
explicit Fahrenheit(double degrees) : degrees(degrees) {}
double degrees;
};
explicitを付けたコンストラクタは、暗黙の変換の候補から外れます。Fahrenheit t = 98.6;のようなコピー初期化は暗黙の変換を要求するのでコンパイルエラーになりますが、Fahrenheit t(98.6);(直接初期化)やFahrenheit t{98.6};(リスト初期化)はコンストラクタを直接指定して呼んでいるだけなので、explicitがあっても問題なくコンパイルできます。これは参考実装であり、唯一の正解ではありません。