Namaran

Code daily. Without assist.

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があっても問題なくコンパイルできます。これは参考実装であり、唯一の正解ではありません。