클래스 객체 포인터
일반 변수처럼 클래스 객체를 포인터 형태로 선언할 수 있다. 클래스 포인터를 이용하여 특정 객체의 멤버들을 참조하기 위해서는 도트 연산자(.) 대신에 화살표 연산자 (->)를 사용한다. 클래스 객체 포인터는 클래스 변수나 클래스 배열에 할당된 메모리 영역의 시작 주소를 대입하여 초기화한다.
예제 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
'C++ 기초 1' 카테고리의 다른 글
[C++] 2-8 클래스 객체의 대입 (2) | 2023.12.04 |
---|---|
[C++] 2-6 this 포인터 사용 이유 및 예제 (3) | 2023.11.30 |
[C++] 2-4 클래스 배열 초기화 설명 및 예제 (2) | 2023.11.28 |
[C++] 2-3 클래스 변수 초기화 / 멤버 변수 초기화 (55) | 2023.11.27 |
[C++] 2-2 클래스 멤버 함수의 자동 인라인 (52) | 2023.11.24 |