C で純粋仮想関数の初期化に「= 0」が使用されるのはなぜですか?

Patricia Arquette
リリース: 2024-11-26 11:14:10
オリジナル
131 人が閲覧しました

Why is

純粋仮想関数の初期化の説明

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート