title: “C++ 3.객체 포인터와 객체 배열” categories:

  • CspecialCharspecialChar

    #C++ 3.객체 포인터와 객체 배열 : 네이버 블로그

C와 마찬가지로 C++도 포인터를 사용 할 수 있다

C++은 클래스를 포인터를 이용해 지정할 수 있습니다

즉 객체 포인터를 사용 할 수 있습니다

#include "pch.h"
#include 
using namespace std;
class circle {
public:
 int radius;
 circle();
 circle(int r);
 double getarea();
};
circle::circle() {
 radius = 1;
}
circle::circle(int r) {
 radius = r;
}
double circle::getarea() {
 return radius \* radius\*3.14;
}


int main() {
 circle a;
 circle \*p;
 p = &a
 cout << p->getarea()<<endl;
 cout << (\*p).getarea() << endl;


}

위 클래스 선언은 전 포스팅과 같으니 넘어가고 다른 내용이 있는 main 안의 코드만 설명하겠다

circle a; //클래스 circle 객체 a생성

circle *p// 객체 포인터 생성

p=&a; 객체 a의 주소를 포인터에 초기화

cout « p->getarea()«endl; //포인터 p의 getarea() 함수 실행

cout « (*p).getarea() « endl; //포인터 p의 getarea() 함수 실행

포인터에서 맴버에 접근하는 방법으로는 p->연산자와 (*p).연산자가 있다

배열 또한 주소이므로 포인터와 같은 방식으로 객체 배열을 사용할 수 있다

#include "pch.h"
#include 
using namespace std;
class circle {
public:
 int radius;
 circle();
 circle(int r);
 double getarea();
};
circle::circle() {
 radius = 1;
}
circle::circle(int r) {
 radius = r;
}
double circle::getarea() {
 return radius \* radius\*3.14;
}
int main() {
 circle a[3];
 a[0].radius = 10;
 a[1].radius = 20;
 a[2].radius = 30;
 circle \*p;
 p = a;
 for (int i = 0; i < 3; i++)
 {
 cout << p->getarea() << endl;
 p++;
 }
}

위 코드 또한 main 안의 코드만 다르므로 main 내의 코드만 설명하겠다

circle a[3]; //circle 클래스의 a[3]객체 생성

a[0].radius = 10; //a[0]의 radius 객체 맴버 접근

a[1].radius = 20; //a[1]의 radius 객체 맴버 접근

a[2].radius = 30; //a[2]의 radius 객체 맴버 접근

circle *p; //circle 클래스 포인터 p 선언

p = a; //배열 자체가 주소므로 주소를 p에 초기화

for (int i = 0; i < 3; i++)

{

cout « p->getarea() « endl; //p내의 맴버 getarea()함수 접근

p++; //배열의 다음 원소로 넘어감

}

객체 포인터를 사용해 객체 배열을 이용하는 방법에는 다양하게 있다

for (int i = 0; i < 3; i++)

{

cout « p->getarea() « endl;

p++;

}

이건 위 코드에 있는 포인터 주소를 증가시켜 접근하는 방법이다

for (int i = 0; i < 3; i++)

{

cout « (*p++).getarea() « endl;

}

객체 포인터와 같이 (*p). 연산자를 사용할 수 있고

for (int i = 0; i < 3; i++)

{

cout « (p+i)->getarea() « endl;

}

포인터 p의 정수 연산을 사용할 수 있다

객체 배열을 초기화시키는 방법으로는

circle a[3]={circle(),circle(10),circle(20)}같이 생성자를 이용해 초기화 할 수 있다

물론 객체 배열도 일반 배열처럼 다차원으로 만들 수 있다

circle a[2][5]처럼

이렇게 객체 포인터와 객체 배열에 알아보았다

업데이트: