純粋仮想関数の初期化の説明
C では、純粋仮想関数は構文「virtual void fun() = 0;」を使用して宣言されます。 」。この「0」による型破りな初期化により、その目的と必要性について疑問が生じています。
背景: 仮想関数と Vtable
仮想関数を使用すると、クラスはさまざまなメソッドを継承できます。オブジェクトのタイプに基づいた実装。 C では、仮想テーブル (vtable) を使用して、オブジェクトごとにこれらのメソッドのアドレスを格納します。関数が呼び出されると、その関数の vtable エントリは適切なメソッド実装を指します。
「0」初期化の重要性
純粋仮想の初期化「0」を指定した関数は vtable の実装には必須ではありません。ただし、 C の作成者である Bjarne Stroustrup は、次の 2 つの重要な目的を達成する便利な方法を提供するため、この構文を選択しました:
1。純粋仮想関数の区別
「0」初期化は、関数が純粋仮想であることを示し、派生クラスでオーバーライドする必要があることを意味します。これにより、純粋な仮想関数が基本クラスで直接使用されることが防止され、適切なポリモーフィズムが強制されます。
2.曖昧さの回避
純粋仮想関数専用の構文がないと、デフォルト値 0 の関数を定義しようとすると混乱が生じる可能性があります。純粋仮想関数のみに「0」を使用することで、その目的が明確になります。通常の関数とは明確に区別されます。
注: 純粋仮想関数を "0" で初期化すると、対応する vtable エントリを NULL に設定しないでください。 vtable の実装はコンパイラごとに異なり、純粋な仮想関数を処理するための他のテクニックが必要になる場合があります。
以上がC で純粋仮想関数の初期化に「= 0」が使用されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。