1. ホーム
  2. c++

[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?

2022-03-19 01:10:36

質問

派生クラスから基底クラスのコンストラクタを呼び出す場合のC++のルールは何ですか?

例えば、Javaでは、サブクラスのコンストラクタの1行目に記述しなければなりません(記述しない場合は、引数のないスーパーコンストラクタへの暗黙の呼び出しと見なされ、それがない場合はコンパイルエラーになります)。

解決するには?

基底クラスのコンストラクタは、引数がない場合、自動的に呼び出されます。 スーパークラスのコンストラクタを引数付きで呼び出したい場合は、サブクラスのコンストラクタ初期化リストを使用する必要があります。 Java と異なり、C++ は多重継承をサポートしているので(良くも悪くも)、ベースクラスは "super()" ではなく、名前で参照する必要があります。

class SuperClass
{
    public:

        SuperClass(int foo)
        {
            // do something with foo
        }
};

class SubClass : public SuperClass
{
    public:

        SubClass(int foo, int bar)
        : SuperClass(foo)    // Call the superclass constructor in the subclass' initialization list.
        {
            // do something with bar
        }
};

コンストラクタの初期化リストの詳細 ここで こちら .