말이 어렵다.
객체...
포인터...
배열...
따로 봐도 어렵고
같이 봐도 어렵다 ㅎ
흔히 클래스를 만들고
main에 선언을 해주면 보통 객체화,
라고들 하는데
거기에 포인터가 붙고, 배열까지 따라 오니
손에 잡힐 듯 하면서도 흘러 내리는 느낌
하나씩 천천히 따라가 보자.
#include <iostream>
#include <string.h>
class AAA
{
int n;
public:
AAA(int _n)
{
n = _n;
std::cout << n << std::endl;
}
};
void main()
{
AAA* aaa[2]; // 객체 포인터 배열 선언
// 이런 식으로 사용하기 위함
aaa[0] = new AAA(10);
aaa[1] = new AAA(20);
// 마지막에 delete
delete aaa[0];
delete aaa[1];
}
막상 보니 별거 아니다.
기존의 포인터에 대해서 이해를 확실하게 했다면
이해 자체는 크게 어렵지 않다.
예제 코드에서는 생성자에 인자값을 받게 해 두었지만
꼭 저런식으로 선언을 해야만 하는것은 아니다.
#include <iostream>
#include <string.h>
int cnt = 0;
class AAA
{
int n;
public:
AAA()
{
n = 0;
std::cout << "AAA() 호출 됨" << std::endl;
cnt++;
}
AAA(int _n)
{
n = _n;
std::cout << "AAA(int _n) 호출 됨" << std::endl;
cnt++;
}
};
void main()
{
AAA** aaa; // 2차원 포인터를 사용해서 응용이 가능
aaa = new AAA*[2]; // 좀전에 객체 포인터 배열을 생성한 것.
// 사용법은 마찬가지
aaa[0] = new AAA[2];
aaa[1] = new AAA(20);
std::cout << "총 생성된 객체의 갯수 : " << cnt << std::endl;
delete [] aaa[0];
delete aaa[1];
// 마지막에 한번더 지워주면 된다.
delete [] aaa;
}
구지 소스코드만 봐도 어떤식으로 돌아 갈것 같은지 이해 하겠지만,
결과값을 보면 확실해 질듯,
왜 이런 결과가 나오는지만 알아도,
객체 포인터 배열에 대해선 걱정하지 않아도 될듯.
내 생각엔 자주 사용하게 될것 같다는 느낌이 직감적으로 꼳히는데,
나만의 착각은 아닐것 같다.
'프로그래밍 > C++' 카테고리의 다른 글
friend (0) | 2010.03.21 |
---|---|
this 포인터 (0) | 2010.03.21 |
클래스의 활용 (0) | 2010.03.20 |
class(클래스) ~ C++의 꽃 ~ (0) | 2010.03.19 |
레퍼런스(Reference) (0) | 2010.03.18 |