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

  • Автор темы Ksenija
  • Дата начала
K

Ksenija

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

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 экспресс-выпуск
 
R

RiCrO

Гость
#2
Для начала бы взять ваш код в тег С++....
 
S

StudyMen

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

ierofant

Гость
#4
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;
}