Класс Stack и его конструктор копирования.
Добавлено: 05 мар 2010, 14:36
Не могу понять КАК работает конструктор копирования в классе Stack.
Разрисовал пошагово в виде схемы каждую строку (updated: как оказалось ошибочно), но истина пока не проникла в мозг
А конкретно:
- если использовать вместо указателя end, указатель из класса top, то результатом копирования будет только 1 символ (ответ логичен: т.к. копию списка делаем вначале, а не в конце - top = end).
- отсюда вытекает следующее: если мы делаем копию вначале, а в конце имеем список end идентичный списку a_stack.top. В top эта информация не попадает, но результатом конструктора является точная копия списка a_stack.top. Как так получается? Где я не так понял суть?
updated
Все понял, осознал. Вложения можно удалить, а то стыд и срам
Код: Выделить всё
struct StackFrame
{
char data;
StackFrame *link;
};
typedef StackFrame* StackFramePtr;
class Stack
{
public:
Stack();
Stack(const Stack& a_stack);
....
private:
StackFramePtr top;
};
//Определение конструктора копирования
Stack::Stack(const Stack& a_stack)
{
if(a_stack.top == NULL)
top = NULL;
else
{
StackFramePtr temp = a_stack.top;
StackFramePtr end;
end = new StackFrame;
end->data = temp->data;
top = end;
temp = temp->link;
while(temp != NULL)
{
end->link = new StackFrame;
end = end->link;
end->data = temp->data;
temp = temp->link;
}
end->link = NULL;
}
}
А конкретно:
- если использовать вместо указателя end, указатель из класса top, то результатом копирования будет только 1 символ (ответ логичен: т.к. копию списка делаем вначале, а не в конце - top = end).
- отсюда вытекает следующее: если мы делаем копию вначале, а в конце имеем список end идентичный списку a_stack.top. В top эта информация не попадает, но результатом конструктора является точная копия списка a_stack.top. Как так получается? Где я не так понял суть?
updated
Все понял, осознал. Вложения можно удалить, а то стыд и срам
