class A
{
public:
virtual void prnt() = 0;
};
class B : public A
{
public:
int b;
B(int _b) : b(_b) {}
void prnt() { cout << "자식 " << b << endl;; }
};
class C : public A
{
public:
int c;
C(int _c) : c(_c) {}
void prnt() { cout << "자식 " << c << endl;; }
};
class D
{
public:
list<A*> aList;
list<A*>::iterator operator[](int temp) // 리스트를 배열처럼 접근하기 위한 연산자 오버로딩
{
list<A*>::iterator iter = aList.begin();
for (int i = 0; i < temp; i++)
{
iter++;
}
return iter;
}
};
void main()
{
map<int, D*> dMap;
D dd;
D da;
B *bb = new B(1);
C *cc = new C(2);
dd.aList.push_back(bb);
dd.aList.push_back(cc);
bb = nullptr;
cc = nullptr;
bb = new B(3);
cc = new C(4);
da.aList.push_back(bb);
da.aList.push_back(cc);
dMap.insert(pair<int, D*>(0, &dd));
dMap.insert(pair<int, D*>(1, &da));
//dMap[0]->aList.front()->prnt(); // 키값이 0인 리스트의 첫번째 멤버의 함수 호출
//(*da[0])->prnt(); // 접근가능
(*dMap[0][0][0])->prnt(); //키값이 0인 멤버의 0번째 함수
(*dMap[0][0][1])->prnt(); //키값이 0인 멤버의 1번째 함수
(*dMap[1][0][0])->prnt(); //키값이 1인 멤버의 0번째 함수
(*dMap[1][0][1])->prnt(); //키값이 1인 멤버의 1번째 함수
cout << endl << "----------------------" << endl << endl;
(*(*dMap[0])[0])->prnt(); //키값이 0인 멤버의 0번째 함수
(*(*dMap[0])[1])->prnt(); //키값이 0인 멤버의 1번째 함수
(*(*dMap[1])[0])->prnt(); //키값이 1인 멤버의 0번째 함수
(*(*dMap[1])[1])->prnt(); //키값이 1인 멤버의 1번째 함수
}
아무래도 가운데 있는 [0]이 *역할을 하는 것 같다...
가운데 [0]을 [1]로 바꾸면 터진다...
(*dMap[0][1])을 시도했다가 계속 메모리가 터져서
알아내는데 한시간 날려먹었다...