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



     Оценочная экспертиза для суда по материалам http://www.aaa66.ru. | Смотрите http://www.volgaecostroy64.ru полусухая стяжка пола. |     

Вернемся в классу iStack - часть 2


void iStack::display()

{

    cout << "( " << size() << " )( bot: ";

    for ( int ix=0; ix < size(); ++ix )

        cout << _stack[ ix ] << " ";

    cout << " stop )\n";

}

Наиболее существенным изменениям подвергнется конструктор iStack. Никаких действий от него теперь не требуется. Можно было бы определить пустой конструктор:

inline iStack::iStack() {}

Однако это не совсем приемлемо для пользователей нашего класса. До сих пор мы строго сохраняли интерфейс класса iStack, и если мы хотим сохранить его до конца, необходимо оставить для конструктора один необязательный параметр. Вот как будет выглядеть объявление конструктора с таким  параметром типа int:

class iStack {

public:

    iStack( int capacity = 0 );

    // ...

};

Что делать с аргументом, если он задан? Используем его для указания емкости вектора:

inline iStack::iStack( int capacity )

{

    if ( capacity )

        _stack.reserve( capacity );

}

Превращение класса в шаблон еще проще, в частности потому, что лежащий в основе вектор сам является шаблоном. Вот модифицированное объявление:

#include <vector>

template <class elemType>

class Stack {

public:

    Stack( int capacity=0 );

    bool pop( elemType &value );

    bool push( elemType value );

    bool full();

    bool empty();

    void display();

    int size();

private:

    vector< elemType > _stack;

};

Для обеспечения совместимости с программами, использующими наш прежний класс iStack, определим следующий typedef:

typedef Stack<int> iStack;

Модификацию операторов класса мы оставим читателю для упражнения.

Упражнение 6.29

Модифицируйте функцию peek() (упражнение 4.23 из раздела 4.15) для шаблона класса Stack.

Упражнение 6.30

Модифицируйте операторы для шаблона класса Stack. Запустите тестовую программу из раздела 4.15 для новой реализации

Упражнение 6.31

По аналогии с классом List из раздела 5.11.1 инкапсулируйте наш шаблон класса Stack в пространство имен Primer_Third_Edition




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