17

コンストラクターが仮想化できない理由を調べるために、いくつかの調査を行いました。ここで理解を深めます。

最初に仮想関数とは何かを説明し、次に最初の説明に基づいてコンストラクターが仮想化できない理由を説明します。

とはvirtual function?

仮想関数は、同じシグネチャを持つ関数によって、派生クラスで再定義またはオーバーライドできる基底クラスの関数またはメソッドです。つまり、仮想関数を使用すると、派生クラスで基本クラス メソッドのカスタマイズされた実装を使用できます。virtualキーワードで宣言する必要があります。仮想関数の呼び出し時に、呼び出し元のオブジェクトのタイプ (動的バインディング) に応じて、関数定義のバージョン (基底クラスまたは派生クラス) を選択する決定が実行時に行われます。

関数が仮想として宣言されると、仮想関数を呼び出すオブジェクトの型を実行時にのみ決定する必要があることをコンパイラに伝えます。次に、オブジェクトのタイプに基づいて、関数呼び出しを関数定義にバインドし、適切な関数を呼び出す必要があります。

なぜ aconstructorは仮想化できないのですか?

関数が仮想として宣言されると、関数を呼び出すオブジェクトの型を実行時にのみ決定し、オブジェクトの型に基づいて適切なバージョンの関数を呼び出す必要があることをコンパイラに伝えます。

コンストラクターが virtual であると宣言された場合、コンストラクターを呼び出すオブジェクトの型を実行時に決定する必要があることをコンパイラーに伝えます。ただし、オブジェクトを構築する場合、オブジェクトの正確なタイプは、実行時ではなくコンパイル時にわかっている必要があります。これが、コンストラクターを仮想化できない理由です。

両方の回答に誤りがあれば、SO メンバーに訂正していただきたいと思います。間違いを指摘するだけでなく、回答として書き直して回答を修正していただければ、私や他の人の助けになると思います。

4

0 に答える 0