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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 17:10   #1
КсенияСергеевна
 
Аватар для КсенияСергеевна
 
Регистрация: 09.11.2009
Сообщений: 5
Смущение Стэк

PHP код:
#include "stdafx.h"
#include <iostream>
using namespace std;
 
class 
Stack
{
    private:
        
struct st
        
st *stack;
        
int top;};
        
st *last;

    public:
        
Stack(int n
        { 
last = new st;
        
last->top=n;
        
last->stack=NULL;
        }
 
        
void operator >(int data
        { 
st *pv = new st;
        
pv->top=data;
        
pv->stack=last;
        
last=pv;}

        
void operator <(int data
        {
cout<<last->top<<endl
        
st *pv=last;
        
last=last->stack;
        
delete pv;}

        
void operator>>(int data
        {
int w;
            for(
int i=0;i<data;i++)
        {
cout<<"vvedite "<<i+1<<" element"<<endl;
        
cin>>w;
        
st *pv = new st;
        
pv->top=w;
        
pv->stack=last;
        
last=pv;};
        }

        
void operator << (int data)
        {while(
last!=NULL)
        
cout<<last->top<<endl
        
st *pv=last;
        
last=last->stack;
        
delete pv;}
};


 
int main()
{
Stack R(5);
R.operator > (8);
R.operator >>(3);
R.operator <(0);
R.operator <<(0);

  
system("pause");
    return 
0;

Это код программы!
Программа звучит так:"создать класс ,описывающий стек. Чтобы в стек можно было добавлять элементы и удалять их,для этого использовать перегруженные операторы (>,>>,<,<<)."
в программе одна ошибка в реализации перегрузки оператора <<(создается зацикливание),остальное работает,помогите исправить!
КсенияСергеевна вне форума Ответить с цитированием
Старый 09.11.2009, 18:40   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Код:
while(last!=NULL) 
        cout<<last->top<<endl;  
        st *pv=last; 
        last=last->stack; 
        delete pv;
"Телом" цикла (или условного оператора) является строка(одна единственная), следующая за оным, либо строки в фигурных скобках следующие за оным.

Соответственно ваш код выполняет строку
Код:
cout<<last->top<<endl;
До тех пор, пока
last!=NULL, что будет вечно, т.к. строки
Код:
st *pv=last; 
last=last->stack; 
delete pv;
Не входят в данный цикл


Правильный вариант:

Код:
void operator << (int data) 
        {
                while(last!=NULL) 
                {
                        cout<<last->top<<endl;  
                        st *pv=last; 
                        last=last->stack; 
                        delete pv;
                }
        }
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 09.11.2009 в 18:47.
ROD вне форума Ответить с цитированием
Старый 09.11.2009, 18:46   #3
КсенияСергеевна
 
Аватар для КсенияСергеевна
 
Регистрация: 09.11.2009
Сообщений: 5
По умолчанию

спасибо,сама не сообразила!)))

а чтобы стек через массив описать,нужно создать массив,ввести его с клавы,а потом вывести в обратном порядке????????

Последний раз редактировалось Sazary; 10.11.2009 в 03:25.
КсенияСергеевна вне форума Ответить с цитированием
Старый 09.11.2009, 18:50   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Да. Создать массив, записать в него элементы, и вывести их, начиная с конца (Первый пришел - последний ушел, или последний пришел - первый ушел).

Хотя массив тут не очень удобен (под массив выделяется некоторое фиксированное кол-во памяти, мы не можем "сжать" или "растянуть" уже созданный массив, по этому структуры тут будут удобнее.)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 09.11.2009, 18:51   #5
КсенияСергеевна
 
Аватар для КсенияСергеевна
 
Регистрация: 09.11.2009
Сообщений: 5
По умолчанию

спасибо)))
КсенияСергеевна вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инвертировать стэк в C++ Drozvd Помощь студентам 0 09.04.2009 03:58