C++ベース(二)

2937 ワード

C++基礎(二)iwehdioのブログ園:https://www.cnblogs.com/iwehdio/
1、クラスとオブジェクト
プログラムは異なる種類の多くのオブジェクトが互いに協力して完成する.どのようなオブジェクトがありますか?オブジェクトのタイプは?相手は直接どんな関係がありますか.
  • C++でクラスを定義する方法:structキーまたはclassキー.(structのメンバーデフォルトpublic,classのメンバーデフォルトprivate)
    class student {
        public: string name;
        public: double score;
        public: void print(){
            cout<
  • クラスタイプのポインタ変数:Tはクラスタイプであり、T*はTポインタタイプである.T*変数はクラスオブジェクトを指すことができます.
    student stu;
    student *p = &stu;
    //         :
    (*p).name = "B";  //      *
    p->score = "C";       //       ->
  • は、動的に分布するオブジェクトを指します.
    student *p = new student;
    p->name = "D";
    delete p;
  • クラスは、メンバー関数を定義することもできますが、役割ドメインvoid student::print(){}を宣言します.
  • thisポインタ:メンバーメソッドを呼び出すオブジェクトを指します.
  • 一般メンバー変数はprivateに設定され、getおよびset関数によって取得および変更されます.
  • コンストラクション関数:オブジェクトの作成時に自動的に呼び出され、関数名とクラス名が同じで、戻りタイプの関数がありません.デフォルトのコンストラクション関数はstudent(){}です.コンストラクション関数をカスタマイズした場合、デフォルトのコンストラクション関数は自動的に生成されません.

  • 2、重荷
  • 演算子の再ロード:
  • cout<<実際の完全な関数名は:operator<。
  • ostream& operator<
  • cin>>同様に、studentのメンバー変数を変更するために、アプリケーションリファレンスを入力します.
  • istream& operator>>(istream &in, student &s){
        cin >> s.name >> s.score;
        return in;
    }
    cin >> stu;
  • friendキーワード:外部関数はクラスのプライベートメンバーにアクセスできません.friendキーワードでクラスの友元関数であることを宣言できます.
    friend ostream& operator<
  • 下付き演算子はクラスに再ロードする必要があります.すなわち、メンバーメソッド:
    class point {
    public: 
        double x, y;
        //       
        double operator[](int n) const {  //   ,           
            if(n == 0){
                return x;
            } else {
                return y;
            }
        }
        //             ,   const      
        double& operator[](int n){    
            if(n == 0){
                return x;
            } else {
                return y;
            }
        }
    }
  • コピーコンストラクション関数:1つのオブジェクトで別のオブジェクトに値を割り当てます.
  • では、デフォルトのコピーコンストラクタが自動的に生成され、ハードコピーが実行されるように定義されていません.
    class String {
        char *data;
        int n;
    public:
        String(const String &s){
            data = s.data;
            n = s.n;
        } 
    }
  • ハードコピーにより、2つのオブジェクトが同じメモリを指し、そのうちの1つが変更され、もう1つが変更されます.
  • 参照データ型のメンバー変数について、コピーコンストラクタを書き換える必要がある:
    String(const String &s){
        data = new char[s.n + 1];
        n = s.n;
        for(int i=0;i
  • 構造関数:関数の実行後にメモリを解放します.
  • パラメータなしでタイプが返されません.
  • デフォルト構造関数:~String(){}.
  • には参照データ型があり、deleteでメモリを解放します.
    ~String(){
        if(data)
            delete[] data;
    }


  • iwehdioのブログ園:https://www.cnblogs.com/iwehdio/