저기 밑에 있는 글 중에 클래스가 생성될 때 동적할당을 하고 파괴할 때 알아서 파괴시켜주는 것을 보고....
한 번 만들어 봤습니다.
그런데 질문 한가지.. 벡터로 동적할당 된 클래스에 접근할려면 어떻게 해야 할까요.
예를 들면
vector 로 선언된 it가 있다면 it에 push_back로 클래스의 동적할당을 집어 넣은다음에 원하는 위치에서 (5번째라던지) 동적할당된 클래스의 내부에 있는 함수를 접근하는 것..
..말로 표현하니까 어렵네요=_=;
일단 제 소스를 올려보겠습니다. 질문은 소스 안에 포함시켰습니다.
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
class Sum {
private:
int Num;
public:
Sum() {}
Sum(int a) { Num = a; }
void SetNum(int a) { Num = a; }
void Out() const { cout << Num << endl; }
};
class Test {
private:
vector<Sum *> ob1;
vector<Sum *>::iterator itr;
public:
Test() {
}
~Test()
{
for(itr = ob1.begin() ; itr != ob1.end() ; ++itr ) {
delete (*itr);
cout << "Delete Ok" << endl;
}
}
void OutData() const {
for(itr = ob1.begin() ; itr != ob1.end() ; ++itr ) {
/////이 부분에서 벡터안에 동적할당된 Sum클래스의 Out()함수에 접근하고 싶습니다. 어떻게 해야 할까요. }
}
void SetSum(int a) {
Sum* pSum = new Sum();
pSum->SetNum(a);
ob1.push_back(pSum);
}
void OutSize() const {
cout << "사이즈는 : " << ob1.size() << endl;
}
};
void main()
{
Test A;
A.SetSum(20);
A.SetSum(10);
A.OutSize();
A.OutData();
}
그리고 iterator 는 member 변수로 잘 안두더군요. 안두는 까닭은 주어진 루틴를 벗어나면 쓸모가 없어지기 때문입니다. 쓸모가 없는 녀석을 갖고 있을 필요는 없거든요.
for (vector<Sum *>::iterator itr = ob1.begin(); itr != ob1.end(); ++itr )
(*itr)->Out();
이렇게 쓰셔도 되고
std::for_each( ob1.begin(), ob1.end(), std::mem_fn( &Sum::Out ) );
이렇게 쓰셔도 됩니다. #include < algorithm > 해주셔야 됩니다.