Шаблоны, исключительные ситуации

Тема в разделе "C/C++/C#", создана пользователем Ksenija, 25 янв 2011.

  1. Ksenija

    Ksenija Гость

    я в программировании чайник,нов университете требуют... не могу написать программу, задание следующее:

    1. Определить класс-шаблон с использованием динамического распределения
    памяти согласно варианту и необходимые конструкторы и операции,
    включая конструктор копий, операция присваивания и если указано
    операцию индексации. При выходе за границу, переполнении и т.п.
    вызвать исключительную ситуацию (определить собственные классы)
    для информирования программы, вызвавшей метод.
    2. Запрограммировать main c тестами
    (создание объектов и выполнение действий с ним,
    в т.ч. действие, приводящее к возникновению исключительной ситуации,
    которую необходимо перехватить)
    Задание:
    9. класс стек элементов заданного типа, размером не более
    указанного в параметрах конструктора,
    добавление << и извлечение >> элемента


    есть такая же написанная программа только не для стека,а для очереди, не могу её переделать... если у кого-то есть время, помогите пожалуйста, вот написанная программа для очереди:

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    #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 экспресс-выпуск
     
  2. RiCrO

    RiCrO Гость

    Для начала бы взять ваш код в тег С++....
     
  3. StudyMen

    StudyMen Гость

    Профессиональная и оперативная помощь студентам в решении задач по программированию.
    Реализатор: ведущий разработчик. Более 5000 выполненных работ по программированию для студентов всех ВУЗов России более чем на 25 различных языках программирования.
    Стоимость: от 30 рублей за задачу.
    Оплата: оплата производится после выполнения задачи (то есть без предоплаты).
    Способ оплаты: электронный платежные системы webMoney и Яндекс-деньги.
    Контакты для связи:
    Email:administrator@studymen.ru
    Skype: studymen
    ICQ: 639151387
     
  4. ierofant

    ierofant Гость

    Код (C++):
    #include <iostream>
    #include <cstring>

    template<typename T> class Stack
    {
    public:
    Stack (unsigned _max_size) : max_size (_max_size), size (0) {}
    ~Stack () {if (size > 0) delete [] mas;}

    public:
    void operator<< (const T &_t)
    {
    if (max_size < size + 1) throw ("Stack full");
    else
    {
    T *temp = new T [size + 1];
    memcpy (temp, mas, size);
    temp [size] = _t;
    if (size > 0) delete [] mas;
    mas = temp;
    size++;
    }
    }

    void operator>> (T &_t)
    {
    if (size <= 0) throw ("Stack empty");
    else
    {
    _t = mas [size - 1];
    T *temp = size > 1 ? new T [size -1] : NULL;
    memcpy (temp, mas, size - 1);
    delete [] mas;
    mas = temp;
    size--;
    }
    }

    private:
    const int max_size;
    int size;
    T *mas;
    };

    int main ()
    {
    Stack<int> stack (3);

    try
    {
    stack << 1;
    stack << 2;
    stack << 3;
    stack << 4;
    }
    catch (const char *_message)
    {
    std::cout << _message << std::endl;
    }

    try
    {
    for (int i = 0; i < 4; i++)
    {
    int x;
    stack >> x;
    std::cout << x << std::endl;
    }
    }
    catch (const char *_message)
    {
    std::cout << _message << std::endl;
    }
    return 0;
    }
     
Загрузка...
Похожие Темы - Шаблоны исключительные ситуации
  1. Edip
    Ответов:
    1
    Просмотров:
    1.042
  2. late
    Ответов:
    0
    Просмотров:
    1.328
  3. Whatka
    Ответов:
    2
    Просмотров:
    1.371
  4. dimanwv
    Ответов:
    2
    Просмотров:
    1.577
  5. lmike
    Ответов:
    0
    Просмотров:
    1.397

Поделиться этой страницей