본문 바로가기

C++ 기초 1

[C++] 2-5 클래스 객체 포인터 설명 및 예제

클래스 객체 포인터

   일반 변수처럼 클래스 객체를 포인터 형태로 선언할 수 있다. 클래스 포인터를 이용하여 특정 객체의 멤버들을 참조하기 위해서는 도트 연산자(.) 대신에 화살표 연산자 (->)를 사용한다. 클래스 객체 포인터는 클래스 변수나 클래스 배열에 할당된 메모리 영역의 시작 주소를 대입하여 초기화한다.

 

 
예제 1
#include <iostream>
#include <cstring>		//문자열 처리 헤더 파일
using namespace std;
class child {
private:
	char name[10];
	int age;
	int height;
public:
	void set(char* n, int a, int h);
	void output();
};
void child::set(char* n, int a, int h)
{
	strcpy_s(name, n);	//문자열의 복사
	age = a;
	height = h;
}
void child::output()
{
	cout << "name=" << name << " " << "age=" << age << " " << "height=" << height << endl;
}
int main()
{
	child ob, * p;		//클래스 변수, 클래스 포인터 선언
	p = &ob;			//클래스 포인터의 초기화
	ob.set((char*)"Hong", 15, 168);
	cout << "ob.output(): ";
	ob.output();		//클래스 변수에 의한 멤버 함수 참조
	cout << "p->output(): ";
	p->output();		//클래스 포인터에 의한 멤버 함수 참조
	return 0;
}
실행 결과
ob.output(): name=Hong age=15 height=168
p->output(): name=Hong age=15 height=168
※ 클래스 포인터 변수 p에 클래스 객체 ob의 시작 주소 (&ob)가 대입된다. 클래스 포인터 변수 p를 이용해서 클래스 변수 ob의 각 멤버를 화살표 연산자(->)로 참조할 수 있다. 

 

예제 2
#include <iostream>
#include <cstring>		//문자열 처리 헤더 파일
using namespace std;
class child {
private:
	char name[10];
	int age;
	int height;
public:
	void set(char* n, int a, int h);
	void output();
};
void child::set(char* n, int a, int h)
{
	strcpy_s(name, n);	//문자열의 복사
	age = a;
	height = h;
}
void child::output()
{
	cout << "name=" << name << " " << "age=" << age << " " << "height=" << height << endl;
}
int main()
{
	child ob[3], * p;		//클래스 배열, 클래스 포인터 선언
	p = ob;			//클래스 포인터의 초기화
	ob[0].set((char*)"Hong", 6, 120);
	ob[1].set((char*)"Kim", 8, 125);
	ob[2].set((char*)"Lee", 10, 130);
	for (int i = 0; i < 3; i++)
		(p + i)->output();		//클래스 포인터에 의한 멤버 함수 참조
	return 0;
}
실행 결과
name=Hong age=6 height=120
name=Kim age=8 height=125
name=Lee age=10 height=130
※ 클래스 포인터 변수 p에는 클래스 배열 ob에 할당된 메모리 영역의 시작 주소를 대입했다. 

 

참고

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