1

Всем доброго времени суток. Возник вопрос по выполнению задания. Вот само задание:

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

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;
};

Решение надо представить под Windows и Linux.

Выполнил задание, однако отказали, не подскажете в чем косяк ?

template < class ElemType, class IndexType >
class CContainer: public IContainer<ElemType, IndexType>, public map <IndexType, ElemType>
{
public:
    inline const ElemType& GetElem( const IndexType& index ) const throw ( ElemNotFound ) {
        map<IndexType, ElemType>::const_iterator toRet = find(index);
        if (toRet == end()) {
            throw ElemNotFound();
        }

        return toRet->second;
     }

     inline void PutElem( const IndexType& index, const ElemType& elem ) throw () {
        insert(make_pair(index,elem));
     }
};
2
  • 1
    Отказавший должен был мотивировать свое решение.
    – free_ze
    22 июл 2014 в 12:39
  • @андрей коломяга, Если вам дан исчерпывающий ответ, отметьте его как верный (нажмите на галку рядом с выбранным ответом).
    – Deleted
    22 июл 2014 в 17:26

1 ответ 1

4

Не нравится наследование от map. "Предпочитайте агрегацию наследованию".

Внутри CContainer следует завести map, а не наследоваться от него.

Касательно самого наследования, почему наследование от map открытое?

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.