기본 클래스 포인터
기본 클래스 포인터는 부모 클래스로부터 파생된 어떤 객체들도 가리킬 수 있다. 하지만 기본 클래스 포인터를 통해서 접근할 수 있는 파생 객체의 멤버는 부모 클래스에서 상속받은 멤버들로 제한된다. 자세한 내용은 아래 예제에서 참고할 수 있다. 이러한 문제를 해결하기 위해서 가상 함수(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
'C++ 기초 1' 카테고리의 다른 글
| [C++] 5-3 순수 가상 함수 (Pure virtual function) (0) | 2023.12.29 |
|---|---|
| [C++] 5-2 가상 함수(Virtual function) (1) | 2023.12.28 |
| [C++] 4-5 가상 기본 클래스 (Virtual base class) (0) | 2023.12.26 |
| [C++] 4-4 클래스 다중 상속 (2) | 2023.12.22 |
| [C++] 4-3 부모 클래스의 생성자 매개변수 전달 (1) | 2023.12.21 |