1 minute read

1. 상속의 문법적 이해

✏️상속 방법과 초기화

class Person{
    private:
        int m_age;
        char m_name[20];
    public:
        Person(char* name, int age): m_age(age){
            strcpy(m_name, name);
        }
        ~Person();
        void 대충 멤버함수();
}

class UniPerson : public Person     // Person 상속
{
    private:
        char m_major[40];
    public:
        UniPerson(char *name, int age, char* major) : Person(name, age){
            strcpy(m_major, major);
        }
}
  • 자식 클래스는 부모 클래스의 프로퍼티 + 자신의 프로퍼티를 갖는다
  • 초기화는 생성자로 해주는 것이 안전하다.

    자식(유도)클래스의 생성자는 자신이 상속한 부모(기초)클래스의 멤버를 초기화 할 필요가 있다. 따라서 자식클래스 생성자는 부모 클래스의 생성자를 호출하여 부모클래스의 멤버를 초기화하는 것이 좋다.

  • 유도클래스라 할지라도 기초클래스의 private 멤버에 직접적으로 접근할 수는 없다(정보은닉). 따라서 public으로 선언된 함수를 통해 간접적으로 접근해야한다.

✏️유도클래스 객체 생성과 소멸

  • 유도클래스 객체를 생성할 때, 기초 클래스의 생성자가 100% 호출된다. 이때, 기초클래스의 생성자를 명시하지 않으면 디폴트 생성자가 호출된다.

  • 유도클래스 객체가 소멸될 땐, 유도 클래스의 소멸자가 실행되고 그 다음에 기초클래스의 소멸자가 실행된다. (스택)
  • 동적 할당한 메모리 공간을 소멸자에서 해제한다.

2. protected와 상속형태

✏️protected 선언

  • private < protected < public
  • private과 protected 차이
    • 유도클래스가 기초클래스의 protected로 선언된 멤버에 직접 접근할 수 있다.

✏️상속 세가지 형태

1) protected 상속

    class Base{
        private:
            int n1;
        protected:
            int n2;
        public:
            int n3;
    }
  • Base클래스를 protected로 상속받으면, public 멤버가 protected로 변경되어 상속된다.
    class derived : protected Base{
        접근불가:
            int n1;
        protected:
            int n2;
        protected:
            int n3;
    }

2) private 상속

  • 위와 비슷하게, 기초클래스의 멤버가 private 멤버로 변경된다.

    class Base{
        private:
            int n1;
        protected:
            int n2;
        public:
            int n3;
    }
    
    class derived : private Base{
        접근불가:
            int n1;
        private:
            int n2;
        private:
            int n3;
    }
    

3) public 상속

  • public이 범위가 제일 넓은 애여서 그냥 private은 접근 불가가 되고, 나머지는 변경없이 상속된다

    class Base{
        private:
            int n1;
        protected:
            int n2;
        public:
            int n3;
    }
    
    class derived : private Base{
        접근불가:
            int n1;
        protected:
            int n2;
        public:
            int n3;
    }
    

3. 상속을 위한 조건

✏️IS-A 관계

  • “스마트폰은 일종의 전화기입니다” 혹은 “노트북은 일종의 컴퓨터입니다” 와 같은 관계

✏️HAS-A 관계

  • 소유관계
  • “경찰은 총을 소유한다” 와 같은 관계

Tags: ,

Categories:

Updated: