C ++プライム読書ノート

1.OOPコアアイデア:

データの抽象化、継承、動的な結合

2.継承:

 2.1)親クラスのサブクラスはコンストラクタとデストラクタを除くすべてのメンバーを継承継承

あなたはコンストラクタを継承したい場合は、表示を定義する必要があります

例えば

Novel::Book(std::string book_name):EmotionEngine(book_name) {
      std::cout << "build sucess" << std::endl;
    }

コンストラクタは、親クラスを継承しています

2.2)、パブリック/プライベート/保護

公共のメンバーは、外部関数やクラスにアクセスすることができます 

この機能は、クラスのprivateメンバーにアクセスすることができます

保護された関数は、クラスのメンバーと派生クラスのメンバ関数をアクセスすることができます

公共の継承:最も一般的に使用される、親クラスのパブリック、だけでなく、保護された親クラスの保護サブクラスの公開サブクラスの

保護継承:継承されたすべてのプライベートはすべてprivate継承、保護されています

2.3)問題のクラスは、メモリの中で保存されています

メンバ変数とメンバ関数静的は、静的領域において良好なメモリ、コード領域内のメンバ関数、静的メンバ変数を割り当てられたクラスの時間で定義されているが

非静的メンバ関数は、直接、このポインタパラメータが含まれているため、クラスによって呼び出された例に対応する必要があることはできません

仮想関数:2.4)に関連する問題をもたらす導出

C ++仮想関数が実装されています:

1.それぞれの相続の時に、クラスのすべてのオブジェクトにvtableの、vtabel対応するクラスのシェアと同じ仮想テーブルを作成し、仮想関数テーブルは、親クラスを継承し、独自のものを追加し、仮想関数を持つクラスを作成します彼らのためのカバーを交換する仮想関数、および

2.仮想関数テーブルは、仮想関数呼び出しではなく、直接呼び出しは、次に、仮想関数テーブル内の対応する関数ポインタを見つけるために、仮想関数テーブルvptr第対応見つける呼び出すとき、実際に関数ポインタの配列です。多重継承

3.ポインタアクセシビリティの問題

アクセシビリティは、ポインタを定義BaseClassのことで、例えば、ポインタによって定義ポインタによって決定されたアクセス可能なメモリ領域がBaseClassのある範囲とすることができます

派生クラスのオブジェクトへBaseClassのポインタは、派生クラスのみ派生クラスの親ポインタにアドレスを割り当てることができない親クラスのメンバから継承されたアクセスすることができ、なぜなら大きなアクセス範囲の派生クラス、クロスボーダー

最終的なオーバーライド:クラスを示すための最終的なクラスを継承することができない、仮想関数は、この関数は、サブクラスでオーバーライドすることができない、派生クラスのオーバーライドは、関数は基本クラスをカバーするものであることを示し

純粋仮想関数:

virtual int fun_a(int number) =0;

純粋仮想関数の値が0である仮想関数テーブルにおいて、クラスオブジェクトの純粋仮想関数インスタンスが存在しません

おすすめ

転載: blog.csdn.net/loubiao9212/article/details/85709289
おすすめ