個人的には、C がアーキテクチャ設計に適している大きな理由は、将来を見据えたプログラミングができることだと思います。たとえば、派生クラスのアクセスを public/protected/private を通じて基本クラスのメンバーに制限したり、抽象クラスが派生クラスの実装を必要とするインターフェイスを定義したりできます。
仮想関数を宣言/定義するとき、派生クラスは仮想関数をオーバーライドするかどうかを選択できます。この点に関して、C では、派生クラスに特定のメソッドのオーバーライドを要求するために必要なメソッドも提供されており、これも将来のプログラミングの一種と考えることができます。
純粋仮想関数
これは新しいテクノロジーではなく、その機能は非常に単純です。基本クラスが純粋仮想関数を宣言すると、その派生クラスは次のことを行う必要があります。インスタンス化時にこの関数をオーバーライドします。
この例では、sub::f1() メソッドがコメントアウトされているため、27 行目でコンパイル エラーが発生します。
最終指定子
一般に、必要なオーバーライド メソッドがある場合は、オーバーライドを禁止する手段が必要です。しかし、理由はわかりません。この機能は C 11 でのみ導入されました。使用方法も非常に簡単で、関数宣言の後に最終指定子を追加するだけです。
コードは基本的に変更されていませんが、base::f1() ステートメントの後の最後の指定子が置き換えられています。このとき、sub::f1()メソッドが定義されていると上記のようなコンパイルエラーが発生します。
著者の視点
この記事では、純粋仮想関数と最終指定子をまとめて著者の個人的な理解に基づいて説明しています。不正確な点がございましたら、遠慮なく追加・修正してください。
関連記事:
c 11 Final およびオーバーライド指定子について詳しく説明します
auto と decltype の違いと関係C 11 の新機能
関連ビデオ:
以上がC++11 の新機能 - 純粋仮想関数と最終指定子の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。