클래스를 대상으로도 포인터 변수를 선언할 수 있다


이 때 포인터 변수는 해당 클래스의 객체를 가리킬 수 있다


근데 이 포인터 변수는 해당 클래스의 객체 뿐만이 아니라 그 클래스를 상속받는


유도클래스의 객체 또한 가리킬 수 있다


그러니까


기초클래스의 포인터를 가지고 기초클래스와 유도클래스의 객체 모두를 가리킬 수 있는 것이다


그런데


기초클래스의 포인터를 가지고는 기초클래스 내의 public 변수(혹은 함수)에만 접근할 수 있다


실제로 기초클래스의 포인터가 유도클래스 객체를 가리키고 있는 상황에도


기초클래스의 포인터를 가지고는 유도클래스 객체에 접근할수가 없다 ㅡ.ㅡ


왜냐하면


C++ 컴파일러는 기초클래스 형 포인터가 실제로 가리키고 있는것은 신경쓰지 않고


선언된 포인터 변수가 기초클래스 형의 포인터 라는 것에 집중하기 때문이다


즉 컴파일러는 기초클래스 형 포인터가 가리키고 있는게 기초클래스 객체가 될수도,


유도클래스 객체가 될수도 있기 때문에, 이 포인터 변수를 가지고 유도클래스 내의 함수를 호출하려


하면 '해당 함수가 기초클래스 내에 정의되어 있지 않습니다' 라는 에러를 띄워준다


( 함수오버라이딩을 이용해 동일한 함수가 기초클래스와 유도클래스에 정의되었을 때에는


기초클래스에 정의된 함수가 호출된다)


-------------------------------------------------------------------------


요약 :


1. 기초클래스 형 포인터를 가지고 기초클래스 객체 뿐만 아니라 유도클래스 객체도 가리킬 수 있다


2. 근데 기초클래스 형 포인터를 가지고는 기초클래스에 정의된 멤버에만 접근이 가능하다


3. 이를 위한 해결 : 가상 함수


가상함수를 사용하면 기초클래스 형 포인터가 실제로 가리키고 있는 객체에 따라 호출의 대상을 결정


할 수 있다





Posted by huammmm1
,