본문 바로가기

C++ 기초 1

[C++] 5-1 기본 클래스 포인터 (Base class pointer)

기본 클래스 포인터

   기본 클래스 포인터는 부모 클래스로부터 파생된 어떤 객체들도 가리킬 수 있다. 하지만 기본 클래스 포인터를 통해서 접근할 수 있는 파생 객체의 멤버는 부모 클래스에서 상속받은 멤버들로 제한된다. 자세한 내용은 아래 예제에서 참고할 수 있다. 이러한 문제를 해결하기 위해서 가상 함수(virtual function)가 사용된다. 가상 함수에 대한 자세한 내용은 다음 포스팅에 기재하고자 한다.  

 

예제
#include <iostream>
using namespace std;
class parent {	//부모 클래스 정의
private:
	char* name;
public:
	void set_1(char* n) {
		name = n;
	}
	void output_1() {
		cout << "name=" << name << endl;
	}
};

class child :public parent {	//자식 클래스 정의
private:
	int age, height;
public:
	void set_2(int a, int h) {
		age = a; height = h;
	}
	void output_2() {
		cout << "age=" << age << ", height=" << height << endl;
	}
};

int main()
{
	parent* p;	//부모 클래스의 포인터
	parent ob_p;	//부모 클래스의 객체
	child ob_c;	//자식 클래스의 객체
	p = &ob_p;	//부모 클래스의 객체를 가리킴
	p->set_1((char*)"Hong");
	p->output_1();
	p = &ob_c;	//자식 클래스의 객체를 가리킴
	p->set_1((char*)"Lee");	//p를 통해 자식 객체의 멤버 참조
	p->output_1();
	ob_c.set_2(6, 125);	//p를 통한 접근 불가
	ob_c.output_2();	//p를 통한 접근 불가
	return 0;
}
실행 결과
name=Hong
name=Lee
age=6, height=125
  • 기본 클래스 포인터 p는 부모 클래스로부터 파생된 객체 ob_c를 가리킬 수 있다.
  • 기본 클래스 포인터 p를 통해서 접근할 수 있는 파생 객체의 멤버는 부모 클래스에서 상속받은 멤버 set_1()과 output_1()들로 제한된다.
 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13