С++ для начинающих



         

Обобщенный список - часть 2


    void next( list_item *link ) { _next = link; }

    void value( elemType new_value ) { _value = new_value; }

private:

    elemType   _value;

    list_item *_next;

};

Все упоминания типа int в определении класса ilist_item заменены на параметр elemType. Когда мы пишем:

list_item<doub1e> *ptr = new list_item<doub1e>( 3.14 );

компилятор подставляет double вместо elemType и создает экземпляр list_item, поддерживающий данный тип.

Аналогичным образом модифицируем класс ilist в шаблон класса list:

template <class elemType>

class list {

public:

list()

       : _at_front( 0 ), _at_end( 0 ), _current( 0 ),

         _size( 0 ) {}

    1ist( const list& );

    list& operator=( const list& );

    ~list() { remove_all(); }

    void insert ( list_item<elemType> *ptr, elemType value );

    void insert_end( elemType value );

    void insert_front( elemType value );

    void insert_all( const list &rhs );

    int remove( elemType value );

    void remove_front();

    void remove_all();

    list_item<elemType> *find( elemType value );

    list_item<elemType> *next_iter();

    list_item<elemType>* init_iter( list_item<elemType> *it );

    void disp1ay( ostream &os = cout );

    void concat( const list& );

    void reverse ();

    int size() { return _size; }

private:

    void bump_up_size()   { ++_size; }

    void bump_down_size() { --_size; }

    list_item<elemType> *_at_front;

    1ist_item<elemType> *_at_end;

    list_item<elemType> *_current;

    int _size;

};

Объекты шаблона класса list используются точно так же, как и объекты класса ilist. Основное преимущество шаблона в том, что он обеспечивает поддержку произвольных типов данных с помощью единственного определения.

(Шаблоны являются важной составной частью концепции программирования на С++. В главе 6 мы рассмотрим набор классов контейнерных типов, предоставляемых стандартной библиотекой С++. Неудивительно, что она содержит шаблон класса, реализующего операции со списками, равно как и шаблон класса, поддерживающего векторы; мы рассматривали их в главах 2 и 3.)




Содержание  Назад  Вперед