| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Шаблоны,исключительные ситуации |
| Автор: Ksenija 25.1.2011, 14:45 |
| я в программировании чайник,нов университете требуют... не могу написать программу, задание следующее: 1. Определить класс-шаблон с использованием динамического распределения памяти согласно варианту и необходимые конструкторы и операции, включая конструктор копий, операция присваивания и если указано операцию индексации. При выходе за границу, переполнении и т.п. вызвать исключительную ситуацию (определить собственные классы) для информирования программы, вызвавшей метод. 2. Запрограммировать main c тестами (создание объектов и выполнение действий с ним, в т.ч. действие, приводящее к возникновению исключительной ситуации, которую необходимо перехватить) Задание: 9. класс стек элементов заданного типа, размером не более указанного в параметрах конструктора, добавление << и извлечение >> элемента есть такая же написанная программа только не для стека,а для очереди, не могу её переделать... если у кого-то есть время, помогите пожалуйста, вот написанная программа для очереди: #include "stdafx.h" #include <iostream> using namespace std; class Exception { public: enum Error { invalid_value, illegal_value, }; private: Error code; char *message; public: Exception (Error code, char* mes) { this->code = code; int s = strlen(mes); message = new char [s+1]; strcpy(this->message, mes); } Exception (const Exception &ex) { this->code = ex.code; int s = strlen(ex.message); this->message = new char [s+1]; strcpy(this->message, ex.message); } ~Exception() { delete message; } char* getMessage() { return message; } Error getCode(){ return code; } }; template <class TData> class Queue { private: int Size; TData *queue; int MAX; public: Queue(int MAX) { this->Size = 0; this->MAX = MAX; queue = new TData [MAX]; }; Queue (const Queue <TData> &Q){ this->Size = Q.Size; this->MAX = Q.MAX; this->queue = new TData [Q.MAX]; for (int i; i < Q.Size; i++) this->queue[i] = Q.queue[i]; }; ~Queue(){ delete []queue; }; void operator <<(const TData add){ if (Size >= MAX) { char *message = "Queue size can't exceed the maximum"; throw Exception (Exception::invalid_value, message); } queue[Size] = add; Size++; }; Queue operator >>( TData& extract){ if (Size==0){ char *message = "Queue is empty"; throw Exception (Exception::illegal_value, message); } extract = queue[0]; for(int i=0; i<Size; i++){ queue[i] = queue [i+1]; } Size--; return *this; }; void print(){ for(int i=0; i<Size; i++){ cout<<queue[i]<<"\t"; } } }; int main(array<System::String ^> ^args) { Queue <int> queue (2); queue << 1; queue << 2; cout<<"Add an element to the queue\n"; int z; cin>>z; try { queue << z; } catch (Exception &er) { int len = strlen(er.getMessage()) + 1; char *a = new char [len]; strcpy(a, er.getMessage()); cout<<"Error:" <<endl <<a <<endl; } queue.print(); int x; queue >> x; cout<<endl; queue.print(); cout<<125874<<"\n"; Queue <int> queue5 (queue); queue5.print(); int g; cin>>g; return 0; } программируем в Microsoft Visual C++ ,2010 экспресс-выпуск |