は私の質問の例です:派生クラスのコンストラクタは、イニシャライザのリストでベースのデフォルトコンストラクタを使用する必要がありますか?ここ
class MyBaseClass
{
public:
MyBaseClass(): my_bool(false), my_value(0)
{}
MyBaseClass(bool b, int i): my_bool(b), my_value(i)
{}
private:
bool my_bool;
int my_value;
}
class MyDerivedClass1 : public ::MyBaseClass
{
public:
MyDerivedClass1(double d): my_double(d)
{}
private:
double my_double;
}
class MyDerivedClass2 : public ::MyBaseClass
{
public:
MyDerivedClass2(double d): MyBaseClass(), my_double(d)
{}
private:
double my_double;
}
なぜMyDerivedClass1
は明示的MyDerivedClass2
中のような基本クラスを初期化する必要が対私の派生クラスを初期化しても大丈夫な方法ではないでしょうか?
なぜ私は基本コンストラクタを呼び出すだけでC++に頼ることができないのでしょうか?私は彼らが何かに初期化されたかどうかを知っている私は私の初期化リストで他のコンストラクタを呼び出す必要があるだろうが、私が欲しいのは、とにかく呼び出すベースのコンストラクタです。
あなたはエラーを取得していますか?ベースコンストラクタを呼び出すと、コンパイラは自動的にベースクラスのデフォルトコンストラクタを呼び出す必要があります。 – NathanOliver
@NathanOliver - いいえ私はエラーを取得していません。私はコードレビューで、MyDerivedClass2のような基本コンストラクタを含めるように言われました。なぜ私はその理由を尋ねました。誰も私に "ドキュメンテーション"が足りない正当な理由を与えることはできません。だから私はなぜここに尋ねている。また、ベストプラクティスについてのgoogleは、ベースコンストラクタを呼び出すと言いますが、私の同僚もその理由を決めましたが、なぜこの場合はどうすればいいのか分かりません。私は誰かがなぜ良い理由があることを望んでいた。 – TWhite
これはコーディングの標準的な問題のように聞こえるでしょう。その場合、答えはおそらく "あなたがそれを考慮し、ベースを構成するデフォルトが適切で、それを忘れていないと判断したことを示しています" –