생성일: 2021년 10월 30일 오전 1:04
Linked Structure로 만들어진 Stack에 Copy constructor를 추가해보았다.
다른 함수들은 당연히 기존의 Linked Stack과 같기 때문에 생략하였다.
template <class ItemType>
struct NodeType;
template <class ItemType>
class StackType
{
public:
StackType();
~StackType();
StackType(const StackType<ItemType>& anotherStack); // Copy constructor
bool IsFull() const;
bool IsEmpty() const;
void Push(ItemType newItem);
void Pop();
ItemType Top();
private:
NodeType<ItemType>* topPtr; //NodeType을 꼭 전방선언을 해주어야한다 (NodeType Struct정의는 이 줄보다 아래에 있기 때문에 전방선언 하지 않으면 여기서 에러 뜸)
};
template<class ItemType>
StackType<ItemType>::StackType(const StackType<ItemType>& anotherStack)
{
NodeType<ItemType>* ptr1;
NodeType<ItemType>* ptr2;
if (anotherStack.topPtr == NULL) //복사하고자 하는 원본이 비어있을 때
topPtr = NULL;
else
{
topPtr = new NodeType<ItemType>;
topPtr->info = anotherStack.topPtr->info; //우선 한 칸을 만들어서 원본의 가장 첫 노드를 복사한다.
ptr1 = anotherStack.topPtr->next;
ptr2 = topPtr;
while (ptr1 != NULL) //ptr1이 원본 스택을 쭉 돌면서 한 노드 씩 복사하는데 새로운 NodeType을 동적할당하여 deep copy 한다.
{
ptr2->next = new NodeType<ItemType>;
ptr2 = ptr2->next;
ptr2->info = ptr1->info;
ptr1 = ptr1->next;
}
ptr2->next = NULL; //마지막 노드의 next값을 NULL로 설정
}
}
위와 같은 방법 말고도 operator=을 오버로딩하여 copy시킬 수도 있다.