|
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
template <class Type>
class CList
{ typedef struct tagNode
{ struct tagNode* m_pNext;
Type* m_pData;
} Node;
Node* m_pHead;
public:
CList()
{ m_pHead = NULL;
}
~CList()
{ Node* pre;
while(m_pHead)
{ pre = m_pHead;
m_pHead = m_pHead->m_pNext;
free(pre);
}
}
bool Insert(Type& tp);
bool Delete(Type& tp);
void Print();
};
template <class Type>
bool CList<Type>::Insert(Type& tp)
{ Node* node = (Node*)malloc(sizeof(Node));
if (node)
{ node->m_pNext = m_pHead;
node->m_pData = &tp;
m_pHead = node;
return true;
}
return false;
}
template <class Type>
bool CList<Type>::Delete(Type& tp)
{ Node* node = m_pHead;
Node* pre;
while(node)
{ if (*node->m_pData == tp)
{ if (node == m_pHead)
m_pHead = node->m_pNext;
else
pre->m_pNext = node->m_pNext;
free(node);
return true;
}
pre = node;
node = node->m_pNext;
}
return false;
}
template <class Type>
void CList<Type>::Print()
{ Node* node = m_pHead;
while(node)
{ cout << *node->m_pData << endl; //요부분요
node = node->m_pNext;
}
}
int main(int argc, char* argv[])
{ CList<int> list;
int d1(1),d2(2),d3(3),d4(4);
list.Insert(d1);
list.Insert(d2);
list.Insert(d3);
list.Print();
cout << "==============================" << endl;
list.Delete(d1);
list.Delete(d2);
list.Delete(d3);
list.Print();
return 0;
}
위와 같이 template을 이용해서 프로그램을 만들었습니다. 근대 멤버함수 Print에서 m_pData가 기본 자료형일때는 잘 동작하는데 객체(클래스)일때는 처리가 곤란합니다. 객체는 '객체.멤버' 형식으로 읽어 와야 하쟎아요 근대 기본 자료형은 다이렉트로 바로 읽어 오니 서로간에 마찰이 생깁니다. 이경우 고수님들은 어케 처리하나요?
그라고 이건 왜또 작동을 안하나요
list.Insert(1);
list.Insert(2);
list.Insert(3);
인수로 변수가 아니라 상수를 대입하니 에러가 납니다. 정말 환장합니다. C은 너져분해도 이런 문제는 없는데..... 고수님들이 이번에 안가르쳐주면 정말로 C++버려뿔까 보당 말만 객체 지향이지 배워서 써먹으려면 꼭 저런씩으로 사람 속을 팍 팍 뒤집어 버리네..... 교수들은 뭐하나 몰라 돈만 받아 먹고 저런것도 안가르쳐주고..... 아이참 신경질나..... 이건 베이직보다 더하다 더해.....
그럼
|