C++学習ノート(一)——クラスと対象

5203 ワード

クラスとオブジェクト
私のブログ:竹山聴雨
文書ディレクトリ
  • クラスおよびオブジェクト
  • クラスの定義
  • クラスのメンバー関数の定義
  • 外部結合関数
  • インラインメンバー関数
  • オブジェクト
  • オブジェクト定義
  • メンバーのアクセス
  • 名前解析とthisポインタ
  • デフォルトパラメータ付きメンバー関数および関数リロードメンバー関数
  • 構造関数および構造解析関数
  • オブジェクトメンバー
  • 静的メンバー
  • 静的データ・メンバー
  • 静的メンバー関数
  • クラスメンバーへのポインタ
  • クラス外からクラス内を指すポインタ変数
  • クラス外指向メンバー関数のポインタデータ
  • クラス内の静的メンバーへのポインタ
  • クラスの定義
    class   
    {
    	private://           
        public: //           
        protected: //             
    }
    

    注意:クラスを定義する場合、データ・メンバーの初期化は許可されません.
    クラス内のメンバー関数の定義
    がいぶかんすう
    クラス外でメンバー関数を定義する場合は、関数名の接頭辞にクラス名を付け、間に::を付け、クラス名を付けなければグローバルデータまたはグローバル関数になります.
            ::      
    {
        
    }
    
    void Student::set(int a,int b)
    {
        ....
    }
    

    インラインメンバー関数
    プログラムコンパイル時にインラインメンバー関数のコードを関数の各呼び出しに挿入し、関数体の内部拡張として使用します.
    class Student{
        public:
        void set(int sid,string name)
        {
            ....
        }
    }
    

    あるいは再キーワードの前にinlineを追加し、クラス定義の体外の関数をインライン関数として宣言することができる.
    inline void set()
    {...}
     
    void inline set()
    {}
    

    オブジェクト
    オブジェクト向けに開発されたソフトウェアシステムでは,オブジェクトはクラスのインスタンスであり,属性とサービスのパッケージである.オブジェクトは実際の問題のエンティティです.
    オブジェクト定義
    方法1:
    class Student
    {
        public:
        void set();
        private:
        int id;
        ...
    }student1
    

    方法2:
    class Student
    {
        public:
        void set();
        private:
        int id;
        ...
    }
    Student student1;
    

    メンバーのアクセス
    クラスとそのオブジェクトを定義すると、メンバー関数を定義してオブジェクトの内部プロパティへのアクセスを実現できます.
    パブリック(public)で、内部外部でも範囲が行えます
  • オブジェクト呼び出しメンバー
  • .
  • オブジェクトへのポインタによってメンバー
  • が呼び出される. ->
  • (*オブジェクトポインタ名).共有メンバー
  • リモートポイント演算子を使用してアクセスできるのはpublicで定義された共有メンバーのみで、オブジェクト内のプライベートメンバーはクラスの共有メンバー関数でのみアクセスできます.
    名前解析とthisポインタ
    名前解析:メンバー関数を呼び出す場合、通常は略語形式を用いる.したがって、2つ以上のクラスの同じ名前のメンバーを定義して、二義性を生成することはできません.
    thisポインタ:メンバー関数が呼び出されると、関数呼び出しを受け入れるオブジェクトを指す暗黙のパラメータが自動的に渡され、プログラムでキーワードthisを使用してポインタを参照できます.
    void Tdate::set(int m,int d,int y)
    {
        month=m;
        day=d;
        year=y;
    }
    Tdate dd;
    Dd.set(3,11,28);
    //       set ,      this     Tdate   dd。    set  month,day,year         dd     。C++             set      
    void Tdate::set(int m,int d,int y)
    {
        this->month=m;
        this->day=d;
        this->year=y;
    }
    

    つまり、このメンバー関数でアクセスするクラスの任意のデータメンバーに対して、C++言語コンパイラは、thisポインタが指すオブジェクトにアクセスするメンバーとして認識します.thisポインタを使用すると、各オブジェクトが異なるデータ・メンバー値を持つことが保証されますが、これらのデータ・メンバーを処理するコードが共有されます.
    デフォルトのパラメータを持つメンバー関数と関数のメンバー関数の再ロード
    クラスのメンバー関数には、通常の関数と同じ呼び出しルールを持つデフォルト値の関数もあります.メンバー関数はリロード関数であってもよく、クラスのメンバー関数のリロードはグローバル関数のリロード方法と同じである
    コンストラクション関数とコンストラクション関数
    オブジェクトが作成されると、オブジェクトのステータス(データ・メンバーの値)は不確定です.コンストラクション関数は、オブジェクトの初期化を自動的に行うC++の特殊なメンバー関数です.解析関数は、オブジェクトの取り消し時にクリーンアップタスクを実行し、後始末を行います.
    とくせい
  • は戻り値の説明がない、すなわち構造関数と解析関数を定義する関数は関数の戻り値のタイプを指摘することができず、voidも
  • を持つことができない.
  • は、
  • を継承できません.
  • 構造関数は、デフォルトの常熟
  • を有することができる.
  • 構造関数は虚であってもよく、単一構造関数は虚であってはならない
  • 彼らの住所
  • を取ることはできません
  • は、通常の呼び出し方法では解析関数を呼び出すことができず、完全な限定名(オブジェクト名付き.クラス名および関数名)を使用する場合、解析関数
  • を呼び出すことができる.
  • オブジェクトを定義すると、コンパイラは自動的にコンストラクタを呼び出し、オブジェクトを削除すると、コンパイラは自動的にコンストラクタ
  • を呼び出す.
    オブジェクトメンバー
    オブジェクト・メンバーはクラスの集計とも呼ばれます.クラスの定義では、データ・メンバーは他のクラスのオブジェクト、すなわちクラス・オブジェクトを別のクラスのデータ・メンバーとして使用できます.
    静的メンバー
    静的メンバーの特徴は、このクラスが何個のオブジェクトを作成しても、静的メンバーには1つのコピーしかなく、このコピーはこのクラスのすべてのオブジェクトによって共有されることです.
    静的データ・メンバー
    class A{
        Static float x,y;
        Int a,b;
    }
    

    実際には静的データ・メンバーをグローバル変数と見なすことができ、クラスにカプセル化するには通常2つの目的があります.
  • は変数の作用範囲を制限し、クラスオブジェクトの関数メンバーのみが
  • に直接アクセスできる.
  • は、意味に関するグローバル変数と関連する動作を物理的に一緒に配置し、
  • を容易に読み取ることができる.
    書式:
    :=(初期値);
    クラス外初期化
    Int A:X=5;
    Int A:Y=10;
    

    静的メンバー関数
    静的メンバー関数にはthis はありません.彼はクラスのすべてのオブジェクトの共有リソースであり、1つのコピーしかありません.そのため、非静的データメンバーに直接アクセスするには、クラスオブジェクトを介してアクセスする必要があります.
    一般的なメンバー関数にはthisポインタが含まれており、オブジェクト自体を指し、静的でないデータ・メンバーに直接アクセスできます.
    class x
    {
        int member_int;
        staic int static_int;
        public:
        statc void func(int i);
        ...
    }
    void x::func(int i)
    {
        member_int=i; //   
        static_int=j; //  
        obj.member_int=i;//  ,         
        ...
    }
    
  • 静的メンバー関数でアクセスする基本は静的データメンバーまたはグローバル変数
  • である.
  • 静的メンバー関数はクラス排他的メンバー関数に属するため、静的メンバー関数にアクセスするメッセージ受信者はクラスオブジェクトではなく、クラス自体
  • である.
  • 静的メンバー関数は、虚関数
  • ではありません.
    クラスメンバーへのポインタ
    C++は、クラスのオブジェクト内のメンバーのインスタンスではなく、クラスのメンバーを指す特殊なポインタタイプを提供します.
    クラス外からクラス内を指すポインタ変数 :: * =
    class A{
    public:
        int i,*p;
        a(){i=10;p=&i;}
    }
    int A::*p=&a::i;  //p     
    

    クラス外指向メンバー関数のポインタデータ ( :: * )( )=& ::
    class A
    {
        int i;
        public:
        int set(int k)
        {
            i=++k;
            return i;
        }
    }
    void main()
    {
        int A(A::*f)(int)=&A::set;
        A aa;
        cout<

    クラス内の静的メンバーへのポインタ
  • C++言語静的メンバーがどこにいるかチェックしない
  • は、グローバル領域で「データ型クラス名::静的変数名[=...];
  • class A{
        public:
        staic void set(...){...}
    };
    void(*f)(int)=&a::set;