본문 바로가기

C++

[23] 클래스 계층

728x90

클래스의 계층화

파생 클래스는 또 다른 파생크래스에서 상속을 받을 수 있습니다. 이렇게 가지를 계속 뻗어나가는 것을 클래스의 계층화라고 합니다.

 

 

직접 기본 클래스

파생 클래스의 계층화가 진행될 때, 직속으로 상속을 하는 기본 클래스를 말합니다.

 

 

간접 기본 클래스

파생 클래스의 기본 클래스의 기본 클래스를 말합니다.

다시 말해 기본 클래스로 상속을 한 클래스를 다시 상속하면, 처음 클래스가 마지막 파생한 클래스의 간접 기본 클래스입니다.

 

다중상속

파생 클래스가 한 번에 여러 기본 클래스를 상속 받는 것을 말합니다.

 

 

다중상속하기

다중 상속을 받는 방법은 아래와 같습니다.

두 기본 클래스를 적어서 상속합니다.

 

 

상속 받은 기본 클래스가 같은 이름의 함수를 가진 경우 모호성 해결

위에서 설명 했듯이 여러 개의 클래스에서 한 번에 상속을 받을 수 있습니다.

그런데, 상속을 받은 기본 클래스에 같은 이름의 멤버 함수가 있다면 이 함수를 호출했을 때, 컴파일러는 어떤 클래스의 함수인지 알 수가 없어 컴파일을 할 수가 없습니다.

따라서, 모호성을 해결하기 위해 범위해결연산자(::)를 사용합니다.

아래와 같이 어느 클래스의 멤버 함수인지 지정을 해주면 명시적으로 선택할 수 있습니다.

 

 

가상 기본 클래스

다중 상속시 발생하는 문제로 동일한 간접 기본 클래스의 멤버 함수를 사용할 때 생기는 모호성이 있습니다.

간접 기본 클래스에 선언된 프로토 타입 함수 GetSize( )
main( )에서 Animal클래스(간접 기본 클래스)의 GetSize( ) 함수를 호출
어느 직접 기본 클래스를 통해서 접근을 해야 하는지 알 수가 없어서 컴파일 오류 발생

이럴 경우, 기본 클래스로 파생 클래스를 상속할 때 virtual 키워드를 사용해 상속하면 이 문제를 해결할 수 있습니다.

간접 기본 클래스를 상속하는 모든 직접 기본 클래스에 virtual을 사용해 상속합니다.

다시 출력을 해보면,

출력이 잘 되는 것을 알 수 있습니다.

 

 

가상 기본 클래스 사용하는 이유

가상 기본 클래스는 모호성을 해결하기 위해 사용합니다.

여기서의 모호성은 하나의 간접 기본 클래스를 상속받은 두 개의 직접 기본 클래스를 파생 클래스가 상속 받는 상황에서 간접 기본 클래스의 멤버 함수를 호출할 때 어떤 경로를 통해서 호출해야할지 정할 수가 없어서 발생하는 컴파일 에러입니다.

 

728x90

'C++' 카테고리의 다른 글

[25] 클래스 메모리 확보 & 해제  (0) 2021.05.09
[24] 예외 처리  (0) 2021.05.09
[22] 추상 클래스  (0) 2021.05.07
[21] 가상함수  (0) 2021.05.06
[20] 상속  (0) 2021.05.06