ポインタを延期することを決定:原理をC ++の仮想使用してご紹介

このブログは、学生が再び考えると、学者は非友好的なベースの基本的なプログラミング言語とコンパイラの理論を理解していない覚えておくために研究されてきました

仮想基本原則

仮想関数、またはクラス階層かどうか、彼の本当の機能は、意思決定のポインタを延期することで、

その多型の原則の多状態の実装があるだろう、実行するためにコンパイル時に決定を延期するという決定は、実行時に動的バインディングです。

クラス変数を継承、仮想基底クラスは、ポインタは延期することを指すことがある曖昧さの問題サブクラスを解決し、廃棄物の問題を保存します

コンパイル:仮想関数を指している関数名の記号は空です

ファイル名を指定して実行:仮想関数ポインタ指示物体ドメインではなく、クラスのフィールド

仮想何の機能をすることができ

一般的な機能は、メンバとすることができる
コンストラクタは、仮想ことができない
デストラクタが仮想関数であり得る
一般的な仮想関数メンバ
宣言(formal_parameter_list)仮想return_typeのFUNC_NAME
宣言は、クラス定義でのみ関数プロトタイプ宣言されている
派生クラスイルすることができクラスメンバ関数は(ないので、多型の影響を、非仮想関数を継承書き換えないでください)カバー
内の仮想関数の呼び出しが動的であるため、仮想関数は、一般的に、インライン関数を宣言されていない、及びインライン関数はコンパイル静的に処理される
基本クラスをカバーするように仮想関数をオーバーライドする派生クラスは、関数宣言か仮想キーワードを添加するかどうかを、仮想関数として定義される場合に加えて、1

基本クラスのディスプレイをオーバーロード派生クラスの仮想関数をオーバーロード同じ名前の2その他の機能は、(一時的ではないことを確認する理由)非表示になります

そのため、カバーは一般的に派生したクラスの仮想関数グループ機能は、プラスどのように仮想キーワードの一般的な、読みやすさを向上させます

仮想デストラクタ

使用シナリオ:コール・オブジェクトへのポインタ基底クラス(基本クラスオブジェクトまたは派生クラス)デストラクタを使用するために他人を可能とする、我々は仮想デストラクタを使用する必要がある - これは行う必要があり、削除操作は正常になります。逆に、そうでない場合この時間デストラクタベース・クラス・オブジェクト・ポインタポイントので基本クラスのデストラクタに結合静的に格納された関数テーブルへのオブジェクトポインタに仮想デストラクタ、挙動は予測不可能であり、削除、マルチステート、我々を使用して基本クラス派生オブジェクトポインタ操作多型塩基のクラスデストラクタは、メモリリーク原因派生オブジェクト関連するメモリ空間を解放しない場合。

仮想キーワードを実装し、ダイナミックに垣間見るビューを達成するために結合します

仮想テーブル
各多型クラスの仮想テーブル(仮想テーブル)を有し、現在の仮想テーブルが各クラスの仮想関数のエントリアドレスを有し、各オブジェクトは、現在のクラス(vptr)の仮想テーブルへのポインタを有していますマルチ状態の仮想テーブルに基づいて、仮想キーワードを使用すると、仮想ランタイムの初期化の実行の値に基づいて、検索機能のエントリアドレステーブルを呼び出すときの期間、どの機能エントリアドレスの一部は、仮想テーブルを置き、仮想テーブルの値を決定することをコンパイラに指示します。

この記事では、ノートの一部であり、あなたが漠然と言えばC ++コースアドレスZHENG英清華大学の教員の参加は、チュートリアルでは、あなたが行くことができるかを考えると、コースの例を見ると、

公開された24元の記事 ウォン称賛23 ビュー10000 +

おすすめ

転載: blog.csdn.net/TowerOs/article/details/104089199