クラスベース

10667 ワード

アクセス指定子


3つのアクセスフラグ

  • private
    同じクラスのメンバー関数に限定されます.
    直接クラス外からアクセスできません->クラス内でのみ使用できます.
  • protected
    クラス自体と継承されたサブクラスのみが許可されます.
  • public
    他のすべてのクラスを許可します.
    教室の外でも直接訪問できます.
  • アクセス指定子クラス内のアクセス派生クラス内のアクセスクラス以外のアクセスprivateOX protectedOOXppublicoOOO
    クラス定義でアクセス指定子を指定すると、新しいアクセス指定子が表示されるまで、すべてのメンバーに対応するアクセス権が与えられます.
    class test {
    		int testInt;	//private로 선언됨 -> 디폴트 접근 지정 = private이기 때문
        public:
        	float testFloat;
            double testFunction();
    }

    メンバーのアクセス権の設定


    クラス内のメンバー変数

    privateまたはprotectedに設定します.
    これは、メンバー変数を誤った変更から保護するためです.
    =>メンバー関数を使用してメンバー変数を変更する場合によく使用されます.(ビジター関数を参照)

    クラスのメンバー関数

    publicに設定します.
    クラス外でアクセスするには、メンバー関数がオブジェクトが使用可能である必要があります.

    アクセス者関数


    アクセス者関数:publicのメンバー関数を持ち、クラス内のメンバー変数へのアクセスを支援する機能を提供します.
    ->一般的にGet関数とSet関数によって実現されます.
  • Get関数:メンバー変数へのアクセスを許可します.(メンバー変数の値を取得)
  • Set関数:メンバー変数の値を変更できます.
    =>上の2つのアクセス者関数はfunction nameの接頭辞として使用されます.
  • // 클래스 선언부
    class shape {
    	private:
        		int height;
                	int width;
    	public:
        		int GetHeight();
                	int GetWidth();
                    void SetHeight(int userHeight);
                    void SetWidth(int userWidth);
    }
    
    // 클래스 구현부
    int shape::GetHeight() {
    	return height;
    }
    int shape::GetWidth() {
    	return width;
    }
    void shape::SetHeight(int userHeight) {
    	height = userHeight;
    }
    void shape::SetWidth(int userWidth) {
    	width = userWidth;
    }

    アクセス者関数の利点

  • は、様々なRevalのアクセス権を設定することができる.
    ->ビジター関数は必要なものを作成するだけです.
  • メンバー変数の値を変更または取得すると、メンバー変数の値の有効性を確認できます.
  • friend関数とfriendクラス


    friend関数
    クラスのメンバー関数でなくても、privateprotectedのメンバーにアクセスできます.
    ->アクセスしたいclass宣言帳にfriendキーワードを記入し、関数プロトタイプを記入します.
    friendクラス
    特定のレベルのprivateprotectedメンバーのレベルに近づくことができます.
    ->アクセスしたいclass宣言帳にfriend classとclass nameを記入します.
    class Circle {
    	friend void GetArea();	// friend 함수
        	friend class shape;	// friend 클래스
    }
    class shape {
    	private:
        		int Height;
                	int Width;
    }
    
    //main
    void GetArea() {
    	//do something..
    }
    friendは、ほとんどの場合、特別な場合にメンバー変数にアクセスできる例外ルールです.

    メンバー関数のこのポインタ


    このポインタ


    メンバー関数を持つオブジェクトへのポインタ.オブジェクトのアドレスを格納します.
    これは、開発者が宣言した変数ではなく、クラスのメンバー関数でのみ使用できます.
    コンパイラが宣言する変数は、コンパイラが宣言をデフォルトで挿入するパラメータです.
    class Student {
    		int stdNum;
        		int stdName;
    	public:
    		void SetStdNum(int stdNum) {
    			this->stdNum = stdNum //첫 번째는 class꺼, 두 번째는 매개변수
                	}
    }
    /* this만 따로 출력도 가능하다. */
    各オブジェクトのthisは、他のオブジェクトのthisとは異なります.

    これが役に立つなら

  • パラメータの名前がメンバー変数の名前と同じである場合、
  • メンバー関数がオブジェクト自身のアドレスを返すと、
  • 分割コンパイル


    理想的なC++プログラムの作成


    クラスをヘッダファイルとcppファイルに分けて作成します.
  • クラス宣言:ヘッダファイル(.h)に保存->클래스 이름.h
  • クラス実装セクション:cppファイル(メンバー関数の実装)に保存->클래스 이름.cppただし、類実施部はinclude宣言を使用すべきである.
    これにより、クラスを再使用できます.
  • 繰り返しincludeを阻止する方法


    条件付きコンパイル文で解決します.
  • ヘッダファイルの名前で、#defineを使用して構成部品を作成します.
  • ヘッダファイルの一番前に、この構成部品を使用して#ifndefを追加する.
  • ヘッダファイルの末尾に#endifを追加します.
  • // shape.h
    // 심볼 이름은 컴파일 상수와의 충돌을 방지하기 위해, 클래스 이름으로 사용하는 것이 좋다.
    #ifndef SHAPE_H
    #define SHAPE_H
    
    class shape {
    	// declaration member function & variable...
    }
    
    #endif
    
    //main.cpp
    #include <iostream>
    using namespace std;
    
    #include "shape.h"
    #include "shape.h"	// 조건 컴파일문으로 인해, 여러 번 include해도 문제가 발생하지 않는다.
    
    int main() {
    	//do something..
    }
    shape.hにSHAPE Hがない場合はdefineと宣言し、ある場合はendifに直接ジャンプします.