1 minute read

C++ 정리 7 (객체 포인터)

이번 시간 부터는 포인터에 대해서 자세히 알아보도록 하겠습니다.

컴퓨터 프로그래밍 입문자 친구들에게 c언어를 처음 가장 어려운게 뭔지 물어보면 포인터라고 합니다. 포인터는 처음 배우면 어려울 수 있지만 여러번 연습해서 개념을 이해하고 익히면 정말 유용하게 쓰일 수 있습니다.

처음에 파이썬으로 공부할때는 포인터 같은 것이 없었는데 c언어를 공부하면서 포인터라는 개념이 나와서 혼란을 겪었던 적이 있었습니다. 하지만 제가 직접 포인터를 사용한 코드를 작성해보면서 포인터에 대해서 이해하게 되었고 정말 편리하게 사용될 수 있는 도구 라는 것을 깨달았습니다.

이번 시간에는 포인터 중에서도 객체 포인터를 정리하도록 하겠습니다.


객체 포인터

예시 코드를 먼저 보겠습니다.

​ Circle donut;

​ double d = donut.getArea( );

​ Circle *p;

​ p = &donut;

​ d = p->getArea( );

이 코드를 보면 먼저 Circle 이라는 클래스를 포인터 p를 선언 합니다.

그리고 포인터 p에 도넛 객체의 주소를 저장합니다.

그리고 멤버 함수를 호출 합니다. 이때 중요한것이 포인터 에서 멤버 변수나 멤버 함수를 호출할때는 ->연산자를 사용합니다.


객체 배열

객체 배열은 기존의 배열과 같은데 배열안에 원소가 객체인것 뿐입니다.

객체 배열 선언

객체 배열은 다음과 같이 선언합니다.

​ Circle circleArray[3];

이 배열은 3개의 Circle 객체를 가지고 있는 배열 입니다.

이 배열 선언문은 생성되면서 기본 생성자를 호출합니다. 이때 매개변수가 없는 기본 생성자가 호출 됩니다.

객체 배열 사용

객체 배열은 기존의 배열과 같이 [ ] 연산자로 구분합니다. 다음 예시 코드를 보겠습니다.

​ circleArray[0].setRadius(10);

​ circleArray[1].setRadius(20);

이런 식으로 [ ]연산자로 배열에 접근하고 객체 이름으로 맴버에 접근한 것 처럼 . 연산자로 멤버에 접근 할 수 있습니다.

배열 포인터 사용

또한 포인터로 객체 배열을 다룰 수 있습니다. 이 내용은 수업시간에 교수님이 강조한 내용으로 나중에 정말 많이 쓰이는 내용입니다. 이 내용을 확실히 알고 넘어가는게 좋을 것 같습니다.

​ Circle *p

​ p = circleArray;

​ for(int i=0; i < 5; i++ ) {

​ cout « ” Circle “ «  i « p->getArea() « endl;

​ p++ //다음 원소로 포인터 이동

​ }

처음에 객체를 가르키는 포인터 p를 선언하고 p에 cricleArray를 저장해줍니다.

이때 포인터는 배열의 가장 첫번째 원소와 같은 뜻이 됩니다.

그래서 p++을 하면 ++를 할때 마다 다음 원소로 포인터가 넘어가게 됩니다.

오늘 배열 포인터는 여기까지 정리하고 다음 시간에 이어서 객체 배열 소멸자, 객체 배열 초기화에 대해서 정리해보도록 하겠습니다.

Updated: