C++虚関数の作用と実現原理(一)

2181 ワード

なぜ虚関数が現れるのでしょうか.これは多態に言及せざるを得ない.
マルチステート:専門的な用語では、同じ実装インタフェースで、異なるインスタンスを使用して異なる操作を実行します.簡単に言えば、同じものの違いは、例えば私が先生の学生で、お父さんとお母さんの娘です.
マルチステートのメリット:
2つのメリットがあります.1.アプリケーションは、派生クラスごとに機能呼び出しを記述する必要はありません.抽象ベースクラスを処理するだけです.プログラムの多重化を大幅に向上させる.//継承2.派生クラスの機能は、ベースクラスのメソッドまたは参照変数によって呼び出され、後方互換性と呼ばれ、拡張性とメンテナンス性を向上させることができます.//多態の真の役割は
マルチステート実装方法の分類:
静的マルチステート------>関数リロードhttps://blog.csdn.net/a15929748502/article/details/80748747
汎用プログラミング
ダイナミックマルチステート------>ダミー関数
すなわち,虚関数は実際には動的多態を実現する方法である.
我々は今日の探索を行うことができます
ダイナミックマルチステートの実装条件:
1.ベースクラスには虚ベースクラスが存在する必要があり、派生クラスは虚ベースクラスの虚関数を書き換える必要があります.
書き換えるときは、ベースクラスの書き換えられる関数は虚関数でなければなりません.
蓄積クラスと派生クラスのプロトタイプは同じでなければなりません(戻り値、関数名、パラメータを含む)
注:コヒーレント(ベースクラス(派生クラス)虚関数は、ベースクラス(派生クラス)のポインタまたは参照を返します)とコンストラクタ例外
2ベースクラスオブジェクトのポインタまたは参照によって虚関数が呼び出されます.
シミュレーションの一例を実装します
こんなシーンがあって、私は大通りを歩いていて、来たのは私の友达の明ちゃんなら、私は彼に「ハイ、明ちゃん」と挨拶すべきです.
紅ちゃんなら「やあ、紅ちゃん」と呼ぶべきだ.
もう一つのシーンは、公衆トイレ、女性のトイレ、男性のトイレです.
いくつかのコードで表すことができ、マルチステートとは何か、虚関数がどのように使われているかをよりよく理解することができます.便利はどこですか.
 
class WashRoom
{
 public:
    void GoToManWashRoom()
    {
          cout< Please Left"< Please Right"<

最後に、どれらの関数が虚の関数をすることができません
1.一般関数
2.友元関数
3,静的メンバー関数(静的メンバー関数はクラスで調整しなくてもよいが、虚関数は必ずクラスで調整する)
4.コンストラクション関数、コピー関数(オブジェクトがなければ、虚表を指すポインタがなければ、虚表で呼び出すことはできません.これは鶏が先にいるか卵が先にあるかの問題です)
5.インライン関数
inline関数はコンパイル時に展開され、呼び出し先で関数全体をコードブロックに置き換え、関数ジャンプの時間を省き、SDを高め、関数呼び出しのオーバーヘッドを減らし、虚関数は継承後のオブジェクトが自分の関数を正確に呼び出し、対応する動作を実行するためである.
主な原因は、inline関数がコンパイル時に展開され、関数体で関数を置き換え、virtualが実行中に動的にバインドされるため、inline関数が虚関数である可能性がないことを決定します.(inline関数はコンパイルメカニズムを体現し、virtualは動的実行メカニズムを体現している.
注意:派生クラスの構造関数は虚関数にしたほうがいいです.派生クラスにスペースがある場合、メモリの漏洩が発生する可能性があります.
演算子のリロードは虚関数として書くことができますが、推奨されません.
つまりクラスのメンバー関数でなければなりません
ここまで探索して皆さんは一定の認識があるでしょう、次の編では虚関数を含む対象モデルをお話しします