본문 바로가기
프로그래밍 언어/C++

[C++] 상속(inheritance)이란?

by 까망 하르방 2021. 7. 4.
반응형

- 기존 객체 속성을 물려받아 새로운 객체를 만든다.

    - 동물

        ㄴ 개, 고양이, 닭, 말, 토끼 등

    - 여행

        ㄴ 해외, 국내, 1박 2일, 당일치기

- 물려주는 부모 역할의 객체를 "기반(Base) 클래스"라 하고,

  물려받는 자식 객체를 "파생(Derived) 클래스"라 한다.

 

① 파생 클래스명 (자식)

② 기반 클래스명 (부모)

③ 상속권한 명시자

    ; 기반클래스로부터 상속받는 멤버들의 파생클래스에서의 접근권한 결정

 기반 클래스 멤버는 파생 클래스에 모두 상속되지만,

     기반클래스의 private멤버는 파생클래스에서 접근할 수 없다

 상속권한 명시자 관점에서 부모(기반) 클래스를 어떻게 상속하는지 살펴보자.

class Base
{
    int id;
protected:
    char name;
public:
    void sub() {};
};

class Derived : public Base
{
protected:
    char name;
public:
    void sub();
};

int main()
{
    Derived d;
    d.sub();
    d.name = 'A'; // error (protected 영역에 있기 때문에 외부에서 호출 X)
}

 

- 기반 클래스의 protected와 public 권한의 멤버는 

  파생 클래스에서 별도 접근 권한으로 변경할 수 있다.

class Base
{
    int id;
protected:
    char name;
public:
    void sub() {};
};

class Derived : public Base
{
    Base::name; // 기반 protected → 파생 private
protected:
    Base::sub; // 기반 private → 파생 protected
public:
    Base::id; // error (기반 클래스에서 private 멤버이기 때문에 접근 불가)
};

 

- 상속 관계 모델링은 자식들이 공통적이거나 추상적인 속성을 부모(기반)클래스에.

  자식(파생) 클래스에 구체적인(Concrete) 내용을 갖는 IS - A 관계(Relationship)이다.

class Base {
    // … (보편적인 Code)
};
class Derived : public Base {
    // … (구체적인 Code)
};

- Cat, Dog is Animal

- 선생님, 학생, 간호사 사람이다.

반응형

댓글