C++ラーニング:クラス、オブジェクト、パッケージ


C++ラーニング:クラス、オブジェクト、パッケージ
  • クラス
  • オブジェクト
  • パッケージC++はプロセス向け、オブジェクト向け、汎用プログラミングを一体化した強力なプログラミング言語であり、その中で最も重要なのはオブジェクト向けではないでしょうか??オブジェクト向けとは?対象に向かう思想は何ですか???まとめて一言:万物はすべて対象である.対象に向かう世界では、すべて対象で説明できる.これも対象思想の真髄である.
    万物すべて対象
    1:類は例を挙げる:タイムアウトの中で商品のショッピングを行う時、そのすべての商品は類目によって区分されている.生活用品、食品など.これがカテゴリ別に分けられます.自然界でも例えば:動物昆虫など.これがクラスです.似たようなものを抽象的に一つのものにする.

  • 構造化プログラミング
           =    +    
    

    オブジェクト向けデザインOOP
        OBJECT ORIENRED PROGRAMING
        Object oritened programing
           =    +   +....
          :                 
    

    オブジェクト向け開発モデルの特性:
              
                        
                     ,          
                ,                 
    

    コンセプト:
     :            ,               
      :          ,          ,           
    

    オブジェクトの3つの特性:
          :      
          :     ,     
          :       ;
    

    クラスとオブジェクトの違い:
              
               
                     
    

    連絡先:
               
                     
                      
    

    世界はオブジェクトからなる
    クラスを定義するには:1:クラス名を定義する2:クラスを記述するデータ・メンバーは属性を表します3:クラスを記述する方法は動作を表します
    クラスのモデリングは抽象とカプセル化の過程である:抽象:関心のない、副次的な情報を除去して重要な情報カプセル化を保持する:情報パッケージの具体的な点:データと行為を1つのパッケージに結合し、オブジェクトの使用者に対してデータを隠す具体的な実現方式でカプセル化を実現する鍵:クラスの中の方法を直接他のクラスの内部データにアクセスさせることができない.公開動作方法でのみ間接的にアクセスできます.
              :
    
                class ClassName{
                    field1;
                    field2;
                    .....;
                    constructor;
                    .....
                    method1;
                    method2;
                }
    

    オブジェクトの2種類の形式:
        1:     :
        struct Saving{
            unsigned accountNumber;
            float balance;
        };
        :     ,                 
    
        2:class  :
        class Savings{
            public:
                float deposit(float amount){
                    balance +=amount;
                    return balance;
                }
            private:
                unsigned accountNumber;
                float balance;
        };
          :         ,             
    

    C++はクラスで抽象データ型を定義する
    C++初期のバージョンはクラス付きCとなっている
    class    {
        public:
            //    
        protected:
            //    
        private:
            //    
            //    
            int val;
    };
    

    クラス内のメンバー関数の定義:
    class Tdate{
        public:
            void set(int m = 1,int d = 2,int y = 3){
                month = m;
                day = d;
                year = y;
            }
            bool isLeepYear(){
                return (year%4 ==0  &&year%100!=0) || (year %400==0);
            }
            void print(){
                cout<

    クラスでメンバー関数を定義する:クラスで定義されたメンバー関数は一般的にインライン関数であり、C++にinlineで明示的に表示されていなくても、クラス定義は通常ヘッダファイルに存在するため、これらのメンバー関数定義もヘッダファイルに入る
    クラスの後にメンバー関数を定義する:C++は他の場所でメンバー関数を定義することを許可する;クラス定義とそのメンバー関数定義を分けるのは、現在開発されているプログラムの一般的な方法です.私たちはクラス定義をクラスの外部インタフェースと見なし、クラスのメンバー関数定義をクラスの内部実装と見なしています.
    最も簡単な例を見てください:main.cppでクラスを定義します.このような中で直接メンバー関数を実現する.(Car.hとCar.cppの形で実現することもできます)
    /*
     * ===========================================================================
     *
     *       Filename:  main.cpp
     *    Description:  
     *        Version:  1.0
     *        Created:  2017 05 26  22 24 05 
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include
    #include
    #include
    using namespace::std;
    
    class Car{
      public:
        void run(){
          cout <<"car run"<void shut(){
          cout<<"car shutdown"<void setProperty(int price,int carNum){
          this->mPrice = price;
          this->mCarNum = carNum;
        }
    
      private:
         int mPrice;
         int mCarNum;
    };
    
    int main(int argc,char *argv[]){
      Car mCar;
      /* *               */
      cout <<"sizeof Car" <<sizeof(mCar)<cout << &mCar <10000,1000000);
      mCar.run();
      mCar.shut();
    
      return 0;
    }

    Carを通るcppおよびCar.hは単純なクラスのパッケージを実現する
    /*
     * ===========================================================================
     *
     *       Filename:  Car.h
     *    Description:  
     *        Version:  1.0
     *        Created:  2017 05 26  22 43 53 
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #ifndef __CAR_H__
    #define __CAR_H__
    
    #ifdef __cplusplus
    extern "C"{
    #endif
    
    /* *
     *           Car  
     * */
    class Car{
      private:
        int mCarPrice;
        int mCarNum;
        int mCarType;
      public:
        void run();
        void shut();
        void setProperty(int price,int carNum,int carType);
        void print();
    };
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif
    /*
     * ===========================================================================
     *
     *       Filename:  Car.cpp
     *    
     *        Version:  1.0
     *        Created:  2017 05 26  22 48 41 
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include
    using namespace::std;
    
    /**
     *   Car   
     */
    #include
    
    /* *
     *       ,  
     * */
    void Car::run(){
      cout << "car run" << endl;
    }
    
    void Car::shut(){
      cout << "car shut" << endl;
    }
    
    void Car::setProperty(int price,int carnum,int cartype){
      mCarPrice = price;
      mCarNum = carnum;
      mCarType = cartype;
      if(mCarType == 1){
        cout << "car type is one" <else if(mCarType == 2){
        cout << "car type is two" <else if(mCarType == 3){
        cout << "car type is three" <void Car::print(){
      cout <<"price:"<"
    "; cout <<"carnum:"<"
    "; cout <<"carType"<
    /*
     * ===========================================================================
     *
     *       Filename:  CarTest.cpp
     *    Description:  
     *        Version:  1.0
     *        Created:  2017 05 26  23 18 01 
     *       Revision:  none
     *       Compiler:  gcc
     *         Author:   (), 
     *        Company:  
     *
     * ===========================================================================
     */
    
    #include
    using namespace::std;
    
    #include
    /* *
     *              ,             
     * */
    void usePoint(Car *mCar){
      cout<<"==============="<setProperty(20000,20002,3);
      mCar ->run();
      mCar ->shut();
      mCar ->print();
    }
    
    
    /* *
     *              ,        
     * */
    void userReference(Car &mCar){
      cout << "==============="<10000,100001,2);
      mCar.run();
      mCar.shut();
      mCar.print();
    }
    
    
    int main(int argc,char *argv[]){
      Car mCar;
      cout << "address:"<< &mCar <cout <<"size of mCar"<< sizeof(mCar) <80001,88888,1);
      mCar.run();
      mCar.shut();
    
      usePoint(&mCar);
      userReference(mCar);
    
      return 0;
    }

    以上は簡単な類と対象と1つの簡単なパッケージの国政についてです
    メンバー関数でメンバーにアクセスするには、次の手順に従います.
                
        Car mCar;
        mCar.run();
           ,               
        void setProperty(int price,int carNum){
          this->mPrice = price;
          this->mCarNum = carNum;
        }
    

    このポインタは、現在のオブジェクトがメモリ領域を占有しているアドレスを表します.
    void Tdate::set(int m ,int d,int y){
        this->month = m;
        this->day = d;
        this->year = y;
    }
    

    ポインタを使用してメンバー関数を呼び出します.
      :
        #include"tdate.h"
        #include
        void func(Tdate *pDate){
            pDate->print();
            if(pDate->isLeepYear()){
                cout<

    参照によってメンバー関数を呼び出します.
    #include"tdate.h"
    #include
    void func(Tdate &pDate){
            pDate.print();
            if(pDate.isLeepYear()){
                cout<

    クラスのメンバー関数のリロード:クラスのメンバー関数は通常の関数のようにリロードできますが、異なるクラスは同じ関数名があってもリロードされません.
    クラスのメンバー関数は、デフォルトでメンバーパラメータを設定できます.クラスの外でこのようなクラスの動作を定義します.
    OOP三大特性(オブジェクト向けの3つの特性):継承(inheritance):多態(polymorphism):カプセル化(encapsulation):クラスの背後に隠されている思想はデータ抽象とカプセル化情報の隠蔽であり、オブジェクトの実現の詳細を隠し、外部から直接アクセスさせずにデータメンバーとメンバー関数を1つのユニットにパッケージする.ユニットはクラスの形式で実現してデータのメンバーとメンバーの関数をクラスの中に包装して、具体的な実現の隠蔽を加えて、共にカプセル化と呼ばれて、その結果は1つの同時に特徴と行為のデータのタイプのカプセル化のクラスを持ちます:クラスを定義して、そのメンバーの関数の過程を定義してカプセル化のクラスと呼ばれます
    詳細:
                     ,            private
               ,        .         
                 .          .      
    

    情報非表示はOOPの最も重要な特性の1つであり、アクセス修飾子を使用することができる理由で修飾記号にアクセスすることもできます.
        public 
        protected
        private
    

    情報の非表示の原因:モジュールの実装の詳細に対する変更は、モジュールのコードを使用してユーザーが予期せぬデータの変更を防ぐことに影響しません.モジュールの使用とメンテナンスが容易になります.