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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2018, 20:55   #1
446444
Новичок
Джуниор
 
Регистрация: 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;
}
446444 вне форума Ответить с цитированием
Старый 10.04.2018, 21:05   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы не перепутали "помогите" и "сделайте за меня"?

покажите свои наработки, конкретные вопросы и т.п.
http://www.programmersforum.ru/announcement.php?f=31

Или в раздел Фриланс если вы не хотите ничего делать, а ищете кого-то, кто выполнит ваши задачи за вознаграждение.
Цитата:
Сообщение от 446444 Посмотреть сообщение
инстанция
судебная?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исключительные ситуации 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