C++におけるオブジェクト&クラスの深い理解


相手は何ですか
何事も一つの対象で、つまり伝説の万物はすべて対象です。
オブジェクトの構成:
  • データ:記述対象の属性
  • 関数:オブジェクトの挙動を説明し、外部の情報に従って対応する動作を行うコード
  • は、同じ属性と行為を有するオブジェクトをクラスとして抽象化する
  • 類は対象の抽象
  • です。
  • オブジェクトはクラスの特例です。
  • プロセスvsオブジェクト指向
    プロセスに向かって
    プロセスに向けたデザイン:
  • は機能をめぐって、一つの関数で機能を実現します。
  • プログラム=アルゴリズム+データ構造
  • アルゴリズムとデータ構造は互いに独立して、別々に設計されている。
  • 対象に向ける
    対象向けのデザイン:
  • は、アルゴリズムとデータを一つのオブジェクトにカプセル化する
  • 設計に必要な歌人類と対象
  • は、関連するオブジェクトにメッセージを送信する
  • オブジェクト=アルゴリズム+データ構造
  • プログラム=オブジェクト*n+メッセージ
  • 何がクラスですか
    C+++においては、クラスでオブジェクトを記述し、クラスはユーザ固有のデータタイプであり、このタイプのデータは一定の行動能力、すなわちクラスに記述された方法を有している。一般的に、1つのクラスの定義は、2つの部分のコンテンツ、1つはクラスの属性、2つはこのクラスの所有する方法である。

    クラスの書式
    書式:
    
    class   
    {
        public:
        //        
    
        private:
        //        
    };
    
    例:
    main.cpp:
    
    #include "Student.h"
    
    using namespace std;
    
    int main() {
        Student student1(1, "Little white", 'f');
    
        student1.display();
        return 0;
    }
    
    Student.cpp:
    
    #include "Student.h"
    #include <iostream>
    using namespace std;
    
    
    
    
    Student::Student(int n, string p, char g) {
        num = n;
        name = p;
        gender = g;
    }
    
    void Student::display() {
        cout << "num: " << num << endl;
        cout << "name: " << name << endl;
        cout << "gender: " << gender << endl;
    }
    
    Student.h:
    
    #ifndef PROJECT1_STUDENT_H
    #define PROJECT1_STUDENT_H
    
    #include <string>
    using namespace std;
    
    
    class Student {
    private:  //     
        int num;  //   
        string name;  //   
        char gender;  //   
    public:
        Student(int num, string name, char gender);
        void display();
    };
    
    
    #endif //PROJECT1_STUDENT_H
    
    出力結果:
    num:1
    name:Little white
    gender:f
    クラスのメンバー関数
    クラスのメンバー関数はクラスのメンバーです。
    注:一つのクラスにメンバー関数が含まれていないと、C言語の構造体と同じです。
    関数アクセス権限
    一般的なアプローチ:外部から呼び出しが必要なメンバー関数はpublicとして指定されています。これらはクラスの対外インターフェースです。
    プライベートメンバ関数は、クラス内の他のメンバー関数によってのみ呼び出され、クラス外で呼び出されてはいけません。メンバー関数は、クラス内の任意のメンバー(プライベートおよびパブリックを含む)にアクセスしてもよく、このスコープ内で有効なデータを参照することができます。
    メンバー関数のパーミッションを呼び出す:
  • prvate:プライベートの
  • public:公有の
  • protected:保護された
  • 訪問先のメンバーの3つの方法:
  • は、オブジェクト名とメンバー演算子を介してオブジェクト内のメンバ
  • にアクセスする。
  • オブジェクトを指すポインタを介して、オブジェクト内のメンバ
  • にアクセスする。
  • オブジェクトの参照変数を介してオブジェクトのメンバーにアクセスする
  • 方法1
    オブジェクトのメンバーには、オブジェクト名とメンバー演算子を介してアクセスします。
    Timeクラス:
    
    #ifndef PROJECT1_TIME_H
    #define PROJECT1_TIME_H
    
    class Time {
    private:
        int hour;
        int minute;
        int second;
    public:
        void set_time(int h, int m, int s);
        void show_time();
    };
    
    #endif //PROJECT1_TIME_H
    
    メール:
    
    int main() {
        Time time;
        time.set_time(6, 6, 6);
        time.show_time();
    
        return 0;
    }
    
    出力結果:
    6:6:6
    方法2
    オブジェクトへのポインタを通して、オブジェクトのメンバーにアクセスします。
    Timeクラス:
    
    #ifndef PROJECT1_TIME_H
    #define PROJECT1_TIME_H
    
    class Time {
    private:
        int hour;
        int minute;
        int second;
    public:
        void set_time(int h, int m, int s);
        void show_time();
    };
    
    #endif //PROJECT1_TIME_H
    
    mian:
    
    int main() {
    
        Time time;  //    time
        time.set_time(6, 6, 6);  //     
    
        Time *p = &time;  //     ,   time  
        p->show_time();
        (*p).show_time();
    
        return 0;
    }
    
    出力結果:
    6:6:6
    6:6:6
    方法3
    オブジェクトの参照変数を通じて、オブジェクトのメンバーにアクセスします。
    参照変数は同じセグメントの記憶手段を占めています。実際にはそれらは同じオブジェクトです。
    Timeクラス:
    
    #ifndef PROJECT1_TIME_H
    #define PROJECT1_TIME_H
    
    class Time {
    private:
        int hour;
        int minute;
        int second;
    public:
        void set_time(int h, int m, int s);
        void show_time();
    };
    
    #endif //PROJECT1_TIME_H
    
    mian:
    
    int main() {
    
        Time time1;  //    time
        time1.set_time(6, 6, 6);  //     
        
        Time &time2 = time1;
        time2.show_time();
    
        return 0;
    }
    
    出力結果:
    6:6:6
    inlineメンバー関数
    内蔵関数を使うとコンパイルプロセスに影響があります。内蔵関数を使うと運転時間が節約できますが、ターゲットプログラムの長さが増加します。
    内蔵関数:
  • は、一般的に小規模で頻繁に使用される関数のみを内蔵関数
  • として宣言します。
  • 内蔵関数には、循環文やswitch文などの複雑な制御文が含まれてはいけません。
  • は関数に対してinline声明をしていますが、プログラム設計者はコンパイルシステムに対して提案しています。
  • 例:
    
    # include <iostream>
    
    using namespace std;
    
    inline int max(int, int, int);
    
    int main() {
        int i = 10, j = 20, k = 40, m;
        m = max(i, j, k);
        cout << "max= " << m << endl;
    
        return 0;
    }
    inline int max(int a, int b, int c){
        a = b > a ? b : a;
        a = c > a ? c : a;
        return a;
    }
    
    締め括りをつける
    ここでC++中のオブジェクト&クラスについての記事を紹介します。C++オブジェクト&クラスに関するものがもっと多いので、以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。