Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Создание класса шаблона, ассоциативного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пишу консольную змейку, крашит при увеличении размера http://www.cyberforum.ru/cpp-beginners/thread1492984.html
Появилось желание сделать свою игру на С++, так как нужно начинать с простого, решил сделать простую змейку. Нашёл в интернете пример, и взялся его переписывать. Пока что убрал некоторые функции,...
C++ Найти площадь круга по длине окружности Вам предоставляется окружность круга. Найти площадь круга. Формат входных данных Ввод содержит положительное вещественное число l (0 <l ≤ 20000) Формат результата Значение должно быть... http://www.cyberforum.ru/cpp-beginners/thread1492972.html
Вычислить длину окружности и площадь круга C++
Вычислить длину окружности и площадь, заключенную в круге Формат входных данных Ввод содержит одно число R (0 ≤ R ≤ 10000) - радиус окружности. Формат результата Выход два числа - длина...
C++ Найти площадь поверхности и объем куба, зная длину его ребра.
Мы знаем длину ребра куба. Найти лицевой области, общую площадь поверхности и объем куба. Формат входных данных Ввод содержит одну положительное целое число (0 <≤ 10000). Формат результата...
C++ Периметр и площадь прямоугольного треугольника http://www.cyberforum.ru/cpp-beginners/thread1492928.html
Длина ног а и б прямоугольного треугольника даны. Найти его периметр и площадь Формат входных данных Ввод содержит два реальных положительных чисел (0 <а≤ 10^5) и В (0 <б ≤ 10^5) - ноги...
C++ Поменять местами наибольшие элементы в верхней и нижней половинах матрицы В матрице A( n- строк, m- столбцов; n- четное) поменять местами наибольшие элементы в ее верхней и нижней половинах. Для поиска индексов наибольшего элемента в заданной части матрицы использовать... подробнее

Показать сообщение отдельно
The New Guy
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 6
04.07.2015, 22:10  [ТС]
Сейчас код немного видоизменился:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include <string>
#include <iostream>
#include <map>
 
template<class IndexType>
class ElemNotFound
{
private:
    IndexType value;
public:
    ElemNotFound(IndexType index):value(index){}
    void mesg();
};
template<class IndexType>
void ElemNotFound<IndexType>::mesg()
{
    std::cout<<"Element #"<<value<<" not found\n";
}
 
 
template <class IndexType, class ElemType> class IContainer
{
private:
    std::map<IndexType, ElemType> arr;
public:
    IContainer() {};
    IContainer(const IndexType & index, const ElemType & elem);
   virtual const ElemType/*&*/ GetElem( const IndexType& index) /*const throw ( ElemNotFound ) = 0*/;
   virtual void PutElem( const IndexType& index, const ElemType& elem ) /*throw () = 0*/;
};
template<class IndexType, class ElemType>
IContainer<IndexType, ElemType>::IContainer(const IndexType & index, const ElemType & elem)
{
        arr[index]=elem;
}
template<class IndexType, class ElemType>
void IContainer<IndexType, ElemType>::PutElem(const IndexType& index, const ElemType& elem)
{
    arr.at(index)=elem;
}
template<class IndexType, class ElemType>
const ElemType/*&*/ IContainer<IndexType, ElemType>::GetElem(const IndexType & index)
{
    arr.find(index);
    //if(index>arr.size())
        //std::cout<<"exception \n";
        //throw ElemNotFound<IndexType> /*err */(index);
    return arr[index];
//return 0;
}
 
int main()
{
    IContainer<double, int> obj (5, 7);
    IContainer<std::string, int> blablabla("golden joe", 6);
    blablabla.PutElem("golden joe", 4);
    /*IContainer<std::string, double> c;
   c.PutElem("pi", 3.14);
   c.PutElem("e", 2.71);
   std::cout << c.GetElem("pi")<<"\n";*/
    //try
    //{
    //std::cout<<blablabla.GetElem("golden joe")<<"  "<<obj.GetElem(1);
    //}
    //catch(/*ElemNotFound<IndexType>::ElemNotFound & bg*/)
    //{
    //  std::cout<<"exeption";//bg.mesg();
    //}
    return 0;
}

Не могу наладить эксепшн по человечьи, наверно я не понимаю как обращаться к созданному объекту. И функции в GetElem я написал find, думаю что с ним делать, и еще возник вопрос в PutElem если он обращается по неправильному индексу, надо по идее тоже эксепшен, но в задании его нет:

Необходимо разработать класс контейнера, реализующий приведенный ниже интерфейс. При разработке приветствуется использование STL.

C++
1
2
3
4
5
6
7
class ElemNotFound {};
template < class ElemType, class IndexType > class IContainer
{
public:
   virtual const ElemType& GetElem( const IndexType& index ) const throw ( ElemNotFound ) = 0;
   virtual void PutElem( const IndexType& index, const ElemType& elem ) throw () = 0;
};
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru