1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Ksenija

    Ksenija Гость

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

    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">
    Код:
    #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 Гость

    Репутация:
    0
    Для начала бы взять ваш код в тег С++....
     
  3. StudyMen

    StudyMen Гость

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

    ierofant Гость

    Репутация:
    0
    Код:
    #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.119
  2. late
    Ответов:
    0
    Просмотров:
    1.414
  3. Whatka
    Ответов:
    2
    Просмотров:
    1.474
  4. dimanwv
    Ответов:
    2
    Просмотров:
    1.663
  5. lmike
    Ответов:
    0
    Просмотров:
    1.455

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