クラス構造解析-静的友元

3995 ワード

  • クラスの定義クラスのメモリサイズが揃えられ、空のクラス1バイト
  • クラスのメンバー変数
  • クラスのメンバー関数
  • クラス内宣言および定義
  • クラス内宣言、クラス外実装
  • 異なるファイル:.h声明.cpp実現
  • クラスドメイン
  • ローカル変数:括弧、括弧開始括弧終了
  • グローバル変数:グローバル、生存サイクルグローバル
  • ファイル変数:static+グローバル変数、現在のファイル内で使用、生存周期グローバルの
  • 静的局所変数:局所,生存周期はグローバル
  • である.
  • クラスドメイン:クラスオブジェクトからアクセスできるメンバー
  • public:共有、クラスオブジェクトのみ、どこでもクラスメンバー
  • を使用できます.
  • protected:私のクラスと派生クラスでのみ
  • を使用できます.
  • private:私のクラスでのみ
  • を使用できます.
  • オブジェクト定義:ローカル、グローバル、配列、スタック
  • メンバー関数の使用thisポインタ
  • 類と構造体の違い
  • とC++の構造体の違い:
  • 定義上:キーワードが異なるstruct class
  • アクセス:書き込みなし、クラスデフォルトはprivate、構造体public
  • 他に区別はない
  • とCの構造体の違い:
  • 定義上:キーワードが異なるstruct class
  • アクセス権:Cにはpublic、protected、private
  • はありません.
  • メンバー:Cの構造体には関数がなく、C++クラスにはメンバー関数がある
  • this:Cの構造体にthisポインタがない


  • ネーミングスペースの役割:ネーミング競合を回避し、ネーミングスペースは別名namespace a=bを果たすことができる.ネーミングスペースは役割ドメインです.変数を定義するために使用できません.ネーミングスペースは役割ドメインです.変数タイプではありません.グローバル範囲内でのみ定義できます.ネストできます.
  • 構造関数1.1構造の役割
  • クラスオブジェクト作成時にクラスオブジェクト空間を初期化するための1.2コンストラクタフィーチャー
  • 名前はクラス名と同じで、戻り値(なし)、パラメータ(任意)1.3呼び出しタイミング
  • クラスオブジェクトがメモリを持ち始めたとき
  • 解析関数2.1作用
  • オブジェクトが破棄する場合、そのオブジェクトが占有するリソース2.2の特徴
  • を解放する.
  • 関数名とタイプは同じで、構造と区別するために、前に~
  • を付ける.
  • 関数の戻り値:戻り値がない
  • パラメータ:2.3呼び出しタイミング
  • を参照しないでください.
  • クラスオブジェクトが破棄するとき->クラスオブジェクトメモリが回収されるとき
  • ローカル変数:役割ドメイン
  • が表示されます.
  • グローバル変数:プログラム終了時
  • スタックオブジェクト:deleteがいつ呼び出されるか
  • は、プロファイルの呼び出し順序
  • を構築する.
  • メンバーオブジェクトのメモリ内の分散順に
  • を呼び出す.
  • コンストラクタ分類4.1デフォルトコンストラクタ
  • クラス名(){}4.2パラメトリック構造関数
  • クラス名(パラメータリスト){関数体}4.3初期化リスト
  • 初期化リストに書かなければならないメンバーは
  • です.
  • は初期化のみをサポートし、付与はサポートしていません:const
  • 初期化と付与の意味が異なる:参照&
  • クラスオブジェクト:クラスオブジェクトのクラスにはパラメトリック関数がない、
  • 初期化リストの初期化順序:メモリ分布順序4.4コピー構築関数
  • パラメータタイプは、現在のクラスオブジェクトの参照であるパラメトリック構造関数
  • である.
  • 呼び出しタイミング:クラスオブジェクトが生成すると、クラスオブジェクトでクラスオブジェクト
  • を初期化する.
  • CClas A = B
  • 関数パラメータ伝達時:実パラメータがパラメータを初期化するとき、パラメータは
  • を参照しない
  • 関数戻りタイプがクラスタイプの場合4.5変換コンストラクタ
  • ほとんどの場合、基本データ型でクラスオブジェクトに値を付与したり、クラスオブジェクトを初期化したりするときに呼び出されるコンストラクタを変換コンストラクタと呼びます.eplicitで暗黙的な変換コンストラクタを制限した後、D objecta=D(20)を使用して一時的な無名オブジェクト呼び出しコピーコンストラクタを作成します.
  • デフォルトメンバー関数
  • Empty();                         //       
    Empty(const Empty&);             //         
    ~Empty();                        //       
    Empty& operator=(const Empty&);  //        
    Empty*operator&();               //      
    const Empty*operator&()const;    //      const
    
  • 静的メンバー1.1由来1.2定義
  • 静的メンバー変数:static int m_nNum;
  • 類外初期化:int類名::m_nNum = 10;
  • 静的メンバー関数:クラスのメンバー関数名にstatic
  • を付ける
  • 静的メンバー変数はすべてのクラスオブジェクトに共有され、クラスオブジェクトに依存しない1.3は
  • を使用する.
  • クラスオブジェクト.メンバー変数/メンバー関数
  • クラス名:メンバー変数/メンバー関数1.4とメンバー関数の違い
  • 静的メンバー関数と一般的なメンバー関数の違い:
  • 静的メンバー関数にはthisポインタがなく、クラスの静的メンバー関数/変数に直接アクセスできます.通常のメンバー関数/変数にアクセスするには、クラスオブジェクトを使用する必要があります.
  • 静的メンバー関数と一般関数の違い
  • ≪同一|Same|emdw≫:クラス・オブジェクトを介してクラスにアクセスできる通常のメンバー関数とメンバー変数の一意の違い:アクセス権限が異なり、通常の関数はpublicメンバーにのみアクセスできます.
  • 友元2.1由来
    クラス外でクラスを使用したい制限メンバー
    2.2友元関数
    クラス内でfriend friend void Draw(CTank obj);を宣言する友元関数と一般メンバー関数の違いを定義します.友元関数にはthisポインタがなく、一般関数ですが、クラスで使用可能な制限メンバーとして宣言されます.クラスのメンバー変数/関数にアクセスするには、クラスオブジェクトが必要です.
    2.3友元類
  • class CTank {
        friend void Draw(CTank obj);
        friend class CDraw;
    public:
        int m_nBlood;
        void Draw() {
            printf("%d
    ", m_nDir); } private: int m_nDir; }; class CDraw { public: void Draw(CTank obj) { printf("%d
    ", obj.m_nDir); } void Change(CTank& obj,int nDir) { obj.m_nDir = nDir; } };

    2.4 Friendメンバー関数
    他のクラスのメンバー関数の一部を私の友元関数として宣言します.
    2.5とメンバー関数の違い
    thisポインタがありますが、このthisポインタは友元クラスのthisポインタではなく、現在のクラスのthisポインタではなく、メンバー関数自体のクラスオブジェクトのアドレスです.したがって、現在のクラスのメンバーを使用するには、現在のクラスのクラスオブジェクトを使用する必要があります.