Programming Language/C, C++

C++ 상속

MOLOKINI 2014. 11. 7. 14:33

객체 지향 프로그래밍이 제공하는 상속이라는 특징은 상속 그 자체로도 의미가 있지만 상속에 의해서 다형성이 제공된다는 점에서 그 의미가 큽니다.

 

클래스형 변환 규칙

클래스와 관련된 형 변환 규칙을 클래스형 변환 규칙이라고 합니다. 규칙들은 아래와 같습니다.

- 파생 클래스의 객체는 기본 클래스의 객체로 형 변환 가능하다.

- 파생 클래스의 포인터는 기본 클래스의 포인터로 형 변환 가능하다.

- 파생 클래스의 레퍼런스는 기본 클래스의 레퍼런스로 형 변환 가능하다.

 

클래스형 변환 규칙 중 객체 간의 형 변환은 자주 사용되지 않습니다. 주로 포인터 간의 형 변환이나 레퍼런스 간의 형 변환이 사용됩니다.

 

백문이 불여일견, 예를 통해서 알아보겠습니다.

 

 

 

도형과 사각형, 원의 관계를 예로 들겠습니다.

Rectangle과 Eclipse = Shape

Rectangle은 Shape를 상속받습니다.

Eclipse는 Shape를 상속받습니다.

- 이로 인해 두 Rectangle과 Eclipse는 공통으로 필요한 기능을 Shape 클래스에서 한번만 구현하고 있습니다.

- 같은 기능을 여러번 구현하지 않고 상속을 통해 한 번만 구현했습니다.

- Shape의 멤버 변수, 함수들인 m_start, m_end, SetStartPoint 등을 상속받음

- Rectangle, Eclipse의 객체 주소는 언제든지 기본 클래스 포인터인 Shape* 형으로 형 변환이 가능합니다.

 + 반대로는 형 변환이 안됩니다!

- Shape : 기본 클래스, Eclipse, Rectangle : 파생 클래스

이러한 관계를 'is-a' 관계라고 하며 Rectangle is a Shape 라고 이해하시면 되겠습니다.

 

파생 클래스는 기본 클래스의 모든 멤버를 상속 받고 추가로 다른 멤버를 제공합니다.

- 파생 클래스 객체를 기본 클래스 포인터로 접근할 경우 -> 파생 클래스가 가진 기능 중 기본 클래스로 부터 상속받은 기능에만 접근 가능

 

아래의 코드는 자세한 구현내용은 별 의미가 없고

기본 클래스인 Shape와 Eclipse, Rectangle이 어떤 연관 관계를 가지고 동작하는지를 위주로 보시면 되겠습니다.

 

Point 클래스와 Shape 클래스 선언

 

'Programming Language > C, C++' 카테고리의 다른 글

C++ 가상 함수 (virtual) - 동적 바인딩  (0) 2014.11.07
C++ 가상 함수 (virtual) - 기본  (0) 2014.11.07
C++ Hash와 Map의 차이점  (0) 2014.10.13
C++와 Java의 차이점  (0) 2014.10.13
C++ STL  (0) 2014.10.10