게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[메모주의] 리스트 멤버로 갖는 맵. 연산자 오버로딩을 통한 리스트 접근
게시물ID : programmer_20529짧은주소 복사하기
작성자 : 브레멘음악대
추천 : 0
조회수 : 311회
댓글수 : 7개
등록시간 : 2017/05/11 10:58:26
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])을 시도했다가 계속 메모리가 터져서
알아내는데 한시간 날려먹었다...
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호