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



         

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


Наличие класса списка в стандартной библиотеке представляет некоторую проблему. Мы выбрали для нашей реализации название list, но, к сожалению, стандартный класс также носит это название. Теперь мы не можем использовать в программе одновременно оба класса. Конечно, проблему решит переименование нашего шаблона, однако во многих случаях эта возможность отсутствует.

Более общее решение состоит в использовании механизма пространства имен, который позволяет разработчику библиотеки заключить все свои имена в некоторое поименованное пространство и таким образом избежать конфликта с именами из глобального пространства. Применяя нотацию квалифицированного доступа, мы можем употреблять эти имена в программах. Стандартная библиотека С++ помещает свои имена в пространство std. Мы тоже поместим наш код в собственное пространство:

namespace Primer_Third_Edition

{

    template <typename elemType>

    class list_item{ ... };

    template <typename elemType>

    class list{ ... };

    // ...

}

Для использования такого класса в пользовательской программе необходимо написать следующее:

// наш заголовочный файл

#include "list.h"

// сделаем наши определения видимыми в программе

using namespace Primer_Third_Edition;

// теперь можно использовать наш класс list

list< int > ilist;

// ...

(Пространства имен описываются в разделах 8.5 и 8.6.)

Упражнение 5.16

Мы не определили деструктор для ilist_item, хотя класс содержит указатель на динамическую область памяти. Причина заключается в том, что класс не выделяет память для объекта, адресуемого указателем _next, и, следовательно, не несет ответственности за ее освобождение. Начинающий программист мог бы допустить ошибку, вызвав деструктор для ilist_item:

ilist_item::~ilist_item()

{

    delete _next;

}

Посмотрите на функции remove_all() и remove_front() и объясните, почему наличие такого деструктора является ошибочным.

Упражнение 5.17

Наш класс ilist не поддерживает следующие операции:




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