|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.04.2018, 20:55 | #1 |
Новичок
Джуниор
Регистрация: 10.04.2018
Сообщений: 1
|
Шаблоны, исключительные ситуации C++ ООП
I. Определить класс-шаблон с использованием динамического распределения памяти и необходимые конструкторы и операции, включая конструктор копий, операция присваивания и операцию индексации. При выходе за границу, переполнении и т.п. вызвать исключительную ситуацию (определить собственные классы) для информирования программы, вызвавшей метод.
1. класс вектор (одномерный массив элементов заданного типа и размера, указанного в аргументах конструктора) получение i-го элемента с помощью операции индексации При определении друзей класса-шаблона использовать следующий пример // предварительные объявления для дружественной функции-шаблона template<class T> class task; // есть класс-шаблон template<class T> task<T>* preempt(task<T>*); // есть функция-шаблон, у которой аргумент - класс-шаблон template<class T> class task { // ... friend void next_time(); // друг - обычная функция friend void process(task<T>*); // друг - экземпляр перегруженной функции // (не шаблон) // друг - конкретная инстанция шаблона функции // с соответствущими аргументами; friend task<T>* preempt<T>(task<T>*); // друг - функция-шаблон с таким же аргументом, как у класса // этот друг требует предварительных объявлений см. выше template<class C> friend int func(C); // все инстанции шаблонной функции // с любыми аргументами friend class task<int>; // друг - конкретная инстанция класса-шаблона template<class P> friend class frd; // друг - все инстанции класса-шаблона // ... }; II. Реализовать main c тестами (создание объектов и выполнение действий с ними, в т.ч. действие, приводящее к возникновению исключительной ситуации, которую необходимо перехватить) ПОМОГИТЕ НАПИСАТЬ Описание интерфейса класса (class {} и комментарии ко всем полям, методам и функциям) Описание тестов для проверки классов (main с комментариями, какие действия выполнялись, полученные результаты) Листинг реализации класса (реализация методов и функций, отступы, без комментариев) КАК ПРИМЕР ЕСТЬ ВАРИАНТ С ДРУГИМ ЗАДАНИЕМ 13. Класс стек элементов заданного типа, размером не более указанного в параметрах конструктора, добавление << и извлечение >> элемента 2 Описание интерфейса класса struct stackerror { virtual ~stackerror() {} virtual const char *message() const=0; }; struct stackempty: stackerror { const char *message() const {return "Стек пуст";} }; struct stackfull: stackerror { const char *message() const {return "Стек полон";} }; template <typename T> class Stack { T *a; int col,size; public: Stack(int size) throw(bad_alloc): col(0), size(size),a(new T[size]) {} ~Stack() throw() {delete []a;} Stack(const Stack<T> &) throw(bad_alloc); Stack<T> &operator=(const Stack<T> &) throw(); Stack<T> &operator<<(const T &) throw (stackfull); Stack<T> &operator>>(T &)throw (stackempty); }; 3 Описание тестов для проверки классов int main() { Stack<int> obj(10); try { for (int i=0;; i++) { obj<<i; } } catch (stackerror &e) { cout<<e.message(); } cout<<"\nИзвлекаем из стека:\n"; try { while (1) { int temp; obj>>temp; cout<<temp; } } catch (stackerror &e) { cout<<"\n"; cout<<e.message(); } return 0; } Полученные результаты: Тест 1. Добавление Стек полон Тест 2. Извлечение Извлекаем из стека: 987654321 Тест 3. Стек пуст 4 Листинг реализации класса template <typename T> Stack<T>:: Stack(const Stack <T> &c)throw(bad_alloc):a(new T[c.size]),col(c.col),size(c.size) { for (int i=0; i<col; i++) a[i]=c.a[i]; } template <typename T> Stack<T> &Stack<T> :perator<<(const T &x) throw(stackfull) { if (col==size) throw stackfull(); a[col++]=x; return *this; } template <typename T> Stack <T> &Stack<T>:perator>>(T &x) throw(stackempty) { if (col==0) throw stackempty(); x=a[--col]; return *this; } |
10.04.2018, 21:05 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Вы не перепутали "помогите" и "сделайте за меня"?
покажите свои наработки, конкретные вопросы и т.п. http://www.programmersforum.ru/announcement.php?f=31 Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение. судебная?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
исключительные ситуации | Illya | Общие вопросы C/C++ | 1 | 07.11.2013 03:40 |
исключительные ситуации | sven4ik | Общие вопросы Delphi | 5 | 30.05.2013 13:51 |
Шаблоны, исключительные ситуации | Ksenija | Помощь студентам | 0 | 25.01.2011 14:26 |
Исключительные ситуации | Nevesta_Sira | Общие вопросы Delphi | 4 | 08.01.2011 14:25 |
Исключительные ситуации | BulbaZavr | Общие вопросы C/C++ | 3 | 29.12.2008 23:05 |