제10장 가상함수
Ԟ.1 포인터를 통한 파생된 함수의 접근
기본 클래스와 파생된 클래스가 존재하고 포인터를 통하여 객체를 접근하는 경우를 생각해 보자. 포인터를 기본 클래스 형으로 정의했다면 이 포인터를 통하여 기본 클래스의 멤버 함수는 물론 해당 클래스에서 파생된 클래스 내의 멤버함수(오버라이드된 함수)까지도 법근이 가능하다. 그러나 포인터를 기본 클래스가 아닌 파생된 클래스의 포인터로 하였를 경우에는 위의 내용이 성립될 수 없다. 왜냐하면 상속의 속성상 물려주는 클래스에서 물려 받는 클래스로 내려갈 수는 있어도 반대의 경우는 성립하지 않기 때문이다.
예 아래의 예에서 기본 클래스의 포인터를 통하여 파생된 클래스의 함수를 접근하였을 때 일어나는 현상에 대하여 설명하고 있다. 아래의 예에서는 mammal 이라는 기본 클래스와 cat이라는 파생 클래스를 만들고 malmmal 형의 포인터를 만들고 이 포인터를 통하여 야 클래스 내에 존재하는 멤버함수가 접근 가능한지를 테스트하고 있다. 예에서 보듯이 파생 클래스 내에 존재하는 virtTest라는 함수는 비록 기본 클래스 포인터를 통하더라도 접근되지 않음을 알 수 있다.
#include iostream.h
#include string.h
enum breed {PERSIAN, AMERICAN, CHINA, OTHER};
char breed_set[] = {`Persian`, `American`, `China`, `Other`};
enum color {RED, BLUE, WHITE, BLACK, YELLOW};
char color_set[] = {`Red`, `Blue`, `White`, `Black`, `Yellow`};
class mammal
{
protected
int age;
color colorVal;
public
mammal(int in_age);
~mamm...
· 해피레포트는 다운로드 받은 파일에 문제가 있을 경우(손상된 파일/설명과 다른자료/중복자료 등) 1주일이내 환불요청 시 환불(재충전) 해드립니다.
(단, 단순 변심 및 실수로 인한 환불은 되지 않습니다.)
· 파일이 열리지 않거나 브라우저 오류로 인해 다운이 되지 않으면 고객센터로 문의바랍니다.
· 다운로드 받은 파일은 참고자료로 이용하셔야 하며,자료의 활용에 대한 모든 책임은 다운로드 받은 회원님에게 있습니다.
저작권안내
보고서 내용중의 의견 및 입장은 당사와 무관하며, 그 내용의 진위여부도 당사는 보증하지 않습니다.
보고서의 저작권 및 모든 법적 책임은 등록인에게 있으며, 무단전재 및 재배포를 금합니다.
저작권 문제 발생시 원저작권자의 입장에서 해결해드리고 있습니다. 저작권침해신고 바로가기