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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2011, 17:45   #1
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию Метод исключений

Код:
// lab 9.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"

using namespace std;

template <typename T> 
class Stack
{
private:
	static int top;
	int sz;
	T* mas;
public:
	Stack(){top=0;}
	void set(int);
	~Stack();
	T operator[](int);
	void push(T);
	T pop();
	int size();
	
};

template <typename T>
int Stack<T>::top = 0;

template <typename T>
void Stack<T>::set(int size)
{
	sz = size;
	top = 0;
	mas = new T[sz];
	for(int i=0;i<sz;i++)
	{
		mas[i]=0;
	}
};

template <typename T>
Stack<T>::~Stack()
{
	delete []mas;
};

template <typename T>
T Stack<T>::operator [](int index)
{
	return mas[index];
}

template <typename T>
void Stack<T>::push(T el)
{
	if(top <= sz)
	{
		mas[top]=el;
		top++;
	}
	else cout<<"Stack is full\n";
		
};

template <typename T>
T Stack<T>::pop()
{
	if(top!=0)
	{
		top--;
		return mas[top];
	}
	else 
	{
		cout<<"Stack is empty\n";
		return 0;
	}
};

template <typename T>
int Stack<T>::size()
{
	return sz;
};
int _tmain(int argc, _TCHAR* argv[])
{
	Stack<int> st;
	int sz=0;
	cout<<"Size: ";
	cin>>sz;
	st.set(sz);
	for(int i=0;i<sz;i++)
	{
		st.push(i);
	}
	cout<<"\nSize: "<<st.size()<<"\n";
    for(int i=0;i<st.size();i++)
	{
		cout<<st[i]<<" ";
	}
	cout<<"\n";
	for(int i=0;i<st.size();i++)
	{
		cout<<st.pop()<<" ";
	}
	
	return 0;
}
Привет. Я реализовал шаблон класса стек. Пожалуйста обработайте ошибку в функции push(T) методом исключения ошибок. Дальше я по аналогии разберусь сам. спасибо.
Blad47 вне форума Ответить с цитированием
Старый 20.04.2011, 19:30   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Код:
template <typename T>
void Stack<T>::push(T el)
{
	if(top <= sz)
	{
		mas[top]=el;
		top++;
	}
	else cout<<"Stack is full\n";
		
};
Эгемс... я чет не понимаю, что за top у вас такой, который для всех экземляров класса одинаков... Поясните, пожалуйста, сначала ваш полет мыслей. Что такое top и зачем он нужен, что такое sz и зачем нужно. А еще было бы круто узнать, что за "метод исключения ошибок". Даже люрк ни одного результата не дал.
mMAg вне форума Ответить с цитированием
Старый 20.04.2011, 21:09   #3
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

насколько я понял top это количество элементов в стеке
Цитата:
что за top у вас такой, который для всех экземляров класса одинаков...
присоединяюсь к вопросу
sz это количество элементов в стеке, почему
Код:
if(top <= sz)
, а не
Код:
if(top < sz)
?
Цитата:
методом исключения ошибок
будет интересно узнать что это
ololo-schoolboy вне форума Ответить с цитированием
Старый 20.04.2011, 21:45   #4
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию

ВСе замечания верны.
правильно
Код:
if(top<sz)
проверял для int , все работает. сейчас не суть в доработке самой программы.
не могу справиться с этим -
Цитата:
[]. Обработку ошибок производить с помощью механизма исключений (обращение по ошибочному индексу, попытка взять элемент из пустого стека).
помогите мне сделать это для одной фунции, дальше я попробую разобраться сам.
Blad47 вне форума Ответить с цитированием
Старый 21.04.2011, 11:43   #5
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию

Акутуально
Blad47 вне форума Ответить с цитированием
Старый 21.04.2011, 13:34   #6
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Blad47 Посмотреть сообщение
Обработку ошибок производить с помощью механизма исключений
Ахах ) так тебе в функциях просто исключения нужно сгенерировать, а не запрещать возможность ошибок. Обрабатывать их, я так понимаю, ты будешь уже в коде, в котором пользуешься своим классом.

Ну, эт делается примерно так:

Объявить где-нить повыше
Код:
class EStackOverflow : Exception {};
А потом в вашей функции сделать вот так:
Код:
template <typename T>
void Stack<T>::push(T el)
{
	if(top < sz)
	{
		mas[top]=el;
		top++;
	}
	else throw new EStackOverflow();
		
};
Далее смотри блоки try-catch. Кучу примеров можно найти в гугле

Главное не полениться полуркать.

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

Код:
Stack<int> st1;
	int sz=0;
	cout<<"Size: ";
	cin>>sz;
	st.set(sz);
	for(int i=0;i<sz;i++)
	{
		st1.push(i);
	}
           Stack<int> st2;
	st2.pop();
Работает такой код? Я тебе не зря спрашивал про странный статический top.
mMAg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
Использование исключений Kasper1 Общие вопросы C/C++ 2 18.12.2010 23:11
обработка исключений user666 Помощь студентам 36 27.08.2010 18:00
Спецификация исключений Kn793 Общие вопросы C/C++ 3 28.06.2010 21:26
Обработка исключений try... except Kati Помощь студентам 5 07.03.2010 10:18