これはよくわからない基本的な概念であり、より明確に理解する必要があります。私の質問は、派生クラスにコンストラクターがない場合でも、基本クラスのコンストラクターが実行されるのですか? または、基本コンストラクターの呼び出しは、派生コンストラクターに関連していませんか? 説明してくれてありがとう!
7 に答える
オブジェクトを作成するたびに、そのコンストラクターが実行されます。オブジェクトを破棄するたびに、そのデストラクタが実行されます。オブジェクトがメンバー、ベース、またはその他のものであるかどうかに関係なく。これは、オブジェクト指向プログラミングの基本です。
はい。定義されていない場合、コンパイラはあなたのためにそれを思い起こさせ、それを使用します
自分でコンストラクタを定義しなくても、デフォルトのコンストラクタがコンパイラによって追加されます。
デフォルトでは、派生クラス コンストラクターは、派生クラス コンストラクターの本体を実行する前に、基本クラスのデフォルト コンストラクターを呼び出します。
必要に応じて、派生クラスのコンストラクターの初期化リストで基本クラスのコンストラクターを呼び出すことができます。
ここに例があります。
class Base
{
public:
Base(int nValue)
{
//body of the constructor
}
};
class Derived: public Base
{
public:
Derived(int mnValue) :Base(mnValue)
{
//body of the constructor
}
};
上記の例では、派生クラスは、派生クラスのコンストラクターの初期化リストで明示的に Base クラスのコンストラクターを呼び出します。
詳細については、を参照してください。
http://www.learncpp.com/cpp-tutorial/113-order-of-construction-of-derived-classes/
http://www.learncpp.com/cpp-tutorial/114-constructors-and-initialization-of-derived-classes/
コンストラクターは、すべての基本クラスに対して常に実行されます。これには、コンパイラによって生成された既定のコンストラクターが含まれます。基本クラスのコンストラクターを呼び出すことができない場合は、常にエラー メッセージが表示されます。
はい、デフォルトでは、基本クラスのデフォルト コンストラクターが実行されます。
これはすべての派生クラス コンストラクターに適用されることに注意してください。別のコンストラクターを指定しない限り、それらはすべて既定のコンストラクターを呼び出します。つまり、派生クラス (ユーザー定義またはコンパイラによって生成された) のコピー コンストラクターは、既定で、既定の基底クラスのコンストラクターを呼び出します。
一般的に言えば、基本クラスのコンストラクターは、派生クラスのコンストラクターの前に呼び出されます。
これを説明する良いSOスレッドがあります:基本クラスのコンストラクターとデストラクタは、派生したもので呼び出されますか
はい確かに、派生クラスにコンストラクターがない場合でも、基本クラスのコンストラクターが実行されます