継承


1.定義

  • オブジェクトユニットコードを繰り返し使用する方法.
  • は、機能の拡張または改善を意味する
    2つ以上のクラス間の関係に基づいて
  • プログラムを記述する

    2.基本文法

  • 構文例
  • //기본,부모 클래스
    class CMyData
    {
    public:
        CMyData() {cout << "CMyData 생성자 호출" << endl;}
        int GetData() {return nData;}
        void SetData(int nParam) {nData = nParam;}
    //파생 클래스만 접근 가능
    protected:
    	void PrintData() {cout << "CMyData 메서드 호출" << 두이;}
    // 해당 클래스외 접근 불가능
    private:
    	int nData = 0;
    };
    //파생,자식 클래스
    class CMyDataEx : public CMyData
    {
    public:
        CMyDataEx() {cout << "CMyDataEx 생성자 호출" << endl;}
        void TestFunc()
        {
        	//기본 클래스 맴버에 접근
            PrintData();
            SetData(5);
            cout << CMyData::GetData() << endl;
        }
    };
    //사용자 측면
    int main()
    {
        CMyDataEx data;
        //기본 클래스 멤버 접근
        data.SetData(10);
        cout << data.GetData() << endl;
        //파생클래스 멤버 접근
        data.TestFunc();
        return 0;
    }
  • 派生クラスのインスタンスが生成されると、ベースクラスの作成者
  • も呼び出される.
  • 派生クラスは基本クラスのメンバーにアクセスできますが、プライベートメンバーは
  • にアクセスできません.
  • ユーザコードでは、派生クラスのインスタンスによってベースクラスメソッドを呼び出すことができる.
  • 3.再定義方法

  • 構文例
  • //초기 제작 클래스
    class CMyData
    {
    public:
        CMyData() {cout << "CMyData 생성자 호출" << endl;}
        int GetData() {return nData;}
        void SetData(int nParam) {nData = nParam;}
    // 해당 클래스외 접근 불가능
    private:
    	int nData = 0;
    };
    //후기 제작 클래스
    class CMyDataEx : public CMyData
    {
    public:
        CMyDataEx() {cout << "CMyDataEx 생성자 호출" << endl;}
        void SetData(int nParam)
        {
        	//기능추가
            //재귀호출 방지하기위해 소속 클래스 명시 필요
            if(nParam < 0) {CMyData::SetData(0);} 
        	if(nParam > 10) {CMyData::SetData(10);}
        }
    };
    //사용자 측면
    int main()
    {
        //구형은 값 보정 기능x
        CMyData a;
        a.SetData(-10);
        cout << a.GetData() << endl;
        //신형에는 값 보정 기능o
        CMyDataEx b;
        b.SetData(15);
        cout << b.GetData() << endl;
        return 0;
    }