Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 11:56   #1
Antifreem
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 12
По умолчанию Конструктор копирования стека

Добрый день!
Задание:
Необходимо для заданного динамического типа данных (СТЕК) описать класс, содержащий указатель как поле данных. Для этого класса описать конструкторы (в том числе и конструктор копирования), деструктор, функцию печати данных. Создать экземпляр полученного класса и проиллюстрировать его корректную работу: распечатать данные, изменить данные и распечатать вновь. Создать второй экземпляр класса как копию первого и проиллюстрировать корректную работу конструктора копирования: распечатать и изменить данные объекта–копии, распечатать данные обоих объектов, сравнить результат. Предусмотреть ошибки.
Текст программы:
PHP код:
#include <iostream>
#include <string>
using namespace std;

class 
Stack{
    
struct list{
        
int hourmin;
        
string task;
        list *
next;
    };
    list *
head;
    public:
        
Stack();
        ~
Stack();
        
Stack(const Stack theStack);
        
void add(int hint mstring str);
        
void del();
        
void show();
};

Stack::Stack():head(NULL){}    //КОНСТРУКТОР

Stack::~Stack(){            //ДЕСТРУКТОР
    
list *temp=head;        //Временный указатель на начало списка
    
while (temp!=NULL)        //Пока по адресу не пусто
    
{   
        
temp=head->next;    //Временная переменная для хранения адреса следующего элемента
        
delete head;        //Освобождаем адрес обозначающий начало
        
head=temp;            //Меняем адрес на следующий
    
}
}

Stack::Stack(const Stack theStack){    //КОНСТРУКТОР КОПИРОВАНИЯ
    
list *item=theStack.head;
    while(
item!=NULL){
        
add(item->houritem->minitem->task);
        
item item->next;
    }
}
void Stack::del(){
    list *
temp=head;        //Временный указатель на начало списка
    
temp=head->next;        //Временная переменная для хранения адреса следующего элемента
    
delete head;            //Освобождаем адрес обозначающий начало
    
head=temp;                //Меняем адрес на следующий
}

void Stack::add(int hint mstring str){
    list *
temp=new list;        //Выделяем память для нового элемента
    
temp->hour=h;
    
temp->min=m;    
    
temp->task=str;
    
temp->next=head;    //Указываем, что следующий элемент это предыдущий
    
head=temp;            //Сдвигаем голову на позицию вперед
}
void Stack::show(){
    list *
temp=head;        //Выделяем память под временный элемент
                            //Указываем ему, что его позиция в голове стека
                            //с помощью цикла проходим по всему стеку
    
cout<<"\tРАСПРЯДОК ДНЯ"<<endl;
    for (
int i=0i<33i++) cout<<"=";
    
cout<<"\n| Время |\tЗадача\t\t|\n";
    for (
int i=0i<33i++) cout<<"-"cout<<endl;
    while (
temp!=NULL)            //выходим при встрече с пустым полем
    
{
        
cout<<"| "<<temp->hour<<":";        //Выводим на экран элемент стека
        
cout<<temp->min<<" |";
        
cout.width(23); 
        
cout<<temp->task<<"|\n";
        
temp=temp->next;        //Переходим к следующему элементу
    
}
    for (
int i=0i<33i++) cout<<"=";
    
cout<<endl;
}

int main(){
    
setlocale(LC_ALL"russian");
    
system("color 9E");
    
Stack a;
    
a.add(12,34,"programming"); 
    
a.show();
    
Stack b(a);
    
//b.show();
    
system("pause");

При создании копии объекта(строка 81) - выдает ошибку.
Подскажите в чем проблема. Среда разработки Microsoft Visual C++ 2010
Antifreem вне форума Ответить с цитированием
Старый 01.12.2012, 15:30   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Это типа такой тест на внимательность? Что за ошибка, нужно самим догадаться?
_Bers вне форума Ответить с цитированием
Старый 01.12.2012, 21:48   #3
Antifreem
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 12
По умолчанию

решил проблему:
Код:
Stack::Stack(const Stack & theStack){    //КОНСТРУКТОР КОПИРОВАНИЯ 
    head=NULL; //ВОТ ЭТОГО И НЕ ХВАТАЛО!!!
    list *item=theStack.head; 
    while(item!=NULL){ 
        add(item->hour, item->min, item->task); 
        item = item->next; 
    } 
}
надо было обнулить head.
Antifreem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конструктор копирования revaldo666 Общие вопросы C/C++ 10 21.06.2011 22:42
Конструктор копирования. 123er4 Общие вопросы C/C++ 4 13.06.2010 01:27
Конструктор копирования Superlotles Общие вопросы C/C++ 2 24.05.2010 17:39
Конструктор копирования Djaconda Общие вопросы C/C++ 3 11.06.2008 18:54