ref:http://blog.naver.com/sea5727/220952601205
상속과 virtual함수
C++에서의 상속과 virtual 함수의 개념을 파악하기 위한 좋은 예제 소스입니다.
기본 소스 개념 : Animal을 상속받는 Cat과 Dog클래스와 내부 함수 설명
f1, f2, f3 은 각각 Animal과 Cat, Dog타입의 클래스를 매개변수로,
f4, f5, f6은 모두 Animal 타입의 클래스를 매개변수로 받습니다.
그 후 print1,2,3 함수들을 출력합니다.
이때 세가지 상황의 함수 형태를 살펴봅니다.
print1 : 부모에도 함수가 정의되어 있고, 자식에게도 함수가 정의 되어 있는 경우
print2 : virtual함수로 부모에도 함수가 정의 되어 있고, 자식에게도 함수가 정의 되어 있는 경우
print3 : 부모에게만 함수가 정의되어 있고, 자식에게는 정의 되어 있지 않은 경우.
* 4번째인 virtual함수로 부모에게만 정의 되어 있는 경우는 *
* 추상 클래스의 개념으로써 새로운 개념의 이해가 필요합니다.
* 여기선 다루지 않습니다.*
|
결과 설명 :
1번째 줄
- 부모와 자식에게 똑같은 이름의 함수로 정의되어 있는 경우,
자식클래스의 경우 함수 호출 할 때 타입이 자식인 경우에는 자식 함수를 Override하여 사용합니다.
2번째 줄
- 부모와 자식에게 똑같은 이름의 (부모에겐 virtual) 함수로 정의 되어 있는 경우,
자식클래스의 경우 함수 호출 할 때 타입이 자식인 경우에는 자식 함수를 Override하여 사용합니다.
이로 인해 알 수 있는 사실.
virtual이든 일반 선언이든 부모와 자식 간에 같은 함수의 이름이 있을 경우,
이 함수를 호출하는 타입이 자식 일 경우에는 자식클래스에 정의된 함수를 호출 합니다.
3번째 줄
- 부모와 자식에게 똑같은 이름의 함수로 정의 되어 있는 경우,
자식 클래스의 경우 함수 호출 할 때 타입이 부모인 경우에는 부모의 함수를 호출 하게 됩니다.
4번째 줄
- 부모와 자식에게 똑같은 이름의 (부모에겐 virtual) 함수로 정의 되어 있는 경우,
자식 클래스의 경우 함수 호출 할 때 타입이 부모인 경우에도 자식 함수를 Override하여 사용 하게 됩니다.
이로 인해 알 수 있는 사실
자식을 부모 타입으로 변환하여 함수를 호출 하면 부모 클래스의 함수가 호출됩니다. 하지만 이 함수가 virtual로 선언되어 있을 경우에는 자식클래스 함수를 호출 하게 됩니다.
5번째 줄과 6번째 줄
어떤 타입으로 함수를 호출하더라도 부모 클래스의 함수를 사용 하게 됩니다.
부모클래스의 함수를 재사용 하게 됩니다.
[출처] [C++ ] 상속과 virtual|작성자 마르세유
'Programming > C,C++' 카테고리의 다른 글
new delete + Heap overruns checker (0) | 2017.04.05 |
---|---|
c++ new delete overriding / leak checker (0) | 2017.04.03 |
Overloading vs Overriding [펌] (0) | 2017.03.25 |
STL vector, list, map [펌] (0) | 2017.03.24 |
echo server/client (0) | 2017.03.24 |