순수 가상 상속
순수 가상 함수란 반드시 재정의가 필요한 함수를 말합니다.
기초 클래스에서 해당 함수의 구현의 의미가 없을 경우 사용하게 되며 기존 가상함수와는 다르게 정의가 없는 것이 특징입니다. 먼저 코드를 보겠습니다.
Pet 클래스를 보면 생소한 부분이 있습니다.
가상 함수 뒤에 = 0을 적어 놓은것인데요. 이 부분이 순수 가상 함수를 선언하는 부분입니다.
굳이 이렇게 사용하는 이유를 생각해보자면, 개는 멍멍 짖는다고 하고 고양이는 냐옹이라고 울때 기초 클래스인 동물 클래스는 뭐라고 울어야 할까요? 딱히 울 이유가 없습니다. 또한 내용을 정의하지 않아도 동물마다 울때의 소리가 다르기 때문에 모든 동물은 다시 해당 함수를 재정의 해야합니다.
이럴때 함수의 인터페이스만을 계승하려는 목적으로 사용하도록 순수 가상함수를 정의 및 사용하게 되며, 순수 가상 함수를 가지는 클래스는 추상 클래스가 되어 객체를 생성할 수 없습니다.
정리하자면, 순수 가상 함수는 함수의 인터페이스만을 제공할때 사용하게 되며, 가상 함수는 함수의 인터페이스와 함께 함수의 재정의를 그리고 일반 함수의 경우 해당 함수의 인터페이스와 구현을 고칠 수 없는 상태로 동시에 계승하려고 할때 사용하게 됩니다.
다중 상속
다중 상속이랑 말 그대로 하나의 클래스가 여러개의 클래스를 상속받는것을 말합니다.
하나 이상의 클래스로 부터 여러가지 행동이나 특징을 받을 수 있기 때문에 필요할 경우도 생길 것 같습니다만..
다만, 이럴경우 하나의 클래스를 상속받아서 동일한 이름의 함수를 처리하는것도 성가신데, 여러개의 기초 클래스에서 함수를 호출하자닌 모호성이 발생하게 됩니다.
[물론 위에 예제는 C 클래스의 함수가 실행된다..]
물론 이 경우 이전에 사용했던 범위지정 연산자를 통해서 해결이 가능하나, 상속관계라든지, 함수의 구분이라든지 이런 부분에서 복잡하게 되어버립니다.
다중 상속의 경우 사용하기전에 여러 삽질을 통해 공부를 조금 더 하고 사용해야겠습니다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 생성자와 소멸자 (0) | 2015.11.15 |
---|---|
[ C++]연산자 오버로딩(1) - operator 키워드 (0) | 2015.10.20 |
[ C++]클래스 상속(3) - 가상 함수 (0) | 2015.09.29 |
[ C++]클래스 상속(2) - 상속 객체와 포인터(객체 포인터) (0) | 2015.09.25 |
[ C++]클래스 상속(1) - 상속을 위한 조건 (0) | 2015.09.24 |