С++ - язык, который изучается постепенно.ОПЕРАТОРЫ КОЛЛЕКЦИЙ
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Операторы коллекций

Многие коллекции индексируются одним или несколькими способами и хорошо соответствуют оператору [], однако в нашем обсуждении курсоров и итераторов нигде не выдвигалось требование непременно использовать оператор [] или индексировать коллекцию. Курсор лишь определяет некоторую внутреннюю позицию в коллекции; эта позиция не обязана быть чем-то понятным или представляющим интерес для пользователя. Если убрать из функции Next() аргумент Index&, описанный итератор можно будет с таким же успехом использовать не для массива, а для чего-то совершенно иного.

В большинстве коллекций имеются общие операции. Как и в случае с оператором [], операторы С++ обычно перегружаются для получения более понятного и удобочитаемого кода. Хотя не существует повсеместного стандарта операторов коллекций, приведенный ниже перечень поможет вам начать ваши собственные разработки. Во всех приведенных операторах сохраняется семантика соответствующих операций с числами.

template <class Element>

class Set {

public:

Set(); // Пустое множество

Set(const Set<Element>&); // Дублировать множество

Set(Element*); // Множество с одним исходным элементом

// Бинарные операции и операции отношения (множество, множество)

// (также варианты |=, &=, -=, <, <=)

Set<Element> operator|(const Set<Element>&) const; // Объединение

// множеств

Set<Element> operator&(const Set<Element>&) const; // Пересечение

Set<Element> operator-(const Set<Element>-) const; // Разность

// множеств

bool operator>(const Set<Element>&) const; // Истинно, если this

// является точным надмножеством аргумента

bool operator>=(const Set<Element>&) const; // Истинно, если this

// является надмножеством аргумента

bool operator==(const Set<Element>&) const; // Истинно, если множества

// имеют одинаковое содержимое

// Бинарные операции и операции отношения (множество, элемент*)

// (также варианты |=, -=)

Set<Element> operator|(Element*); // Добавить элемент в this

Set<Element> operator-(Element*); // this минус элемент

bool operator>(const Element*) const; // Истинно, если элемент

// принадлежит множеству, но не является единственным

bool operator>=(const Element*) const; // Истинно, если элемент

// принадлежит множеству

bool operator==(const Element*) const; // Истинно, если элемент

// является единственным элементом множества

};

Существует еще один вариант перегрузки оператора, о котором я вынужден упомянуть. Я так и не привык к операторам << и >> в качестве операторов «поразрядных сдвигов» в поток и из него, но поскольку они прочно внедрились в культуру С++, эту идиому приходится использовать хотя бы как базу для дальнейшихрасширений. Это приводит нас к дополнительному применению << и >> в контексте коллекций и итераторов:

Оператор << может использоваться в итераторах как синоним функции Next().

Оператор >> может использоваться как синоним более длинного оператора Set&

operator|=(Element*) для «сдвига» новых элементов в коллекцию.

В обоих идиомах оператор должен перегружаться в форме внешней функции, поскольку в левой части оператора находится Element*, а не Set. Идиома >> выглядит наиболее естественно для коллекций, сохраняющих исходный порядок вставки (например, списков).

Мы вернемся к этой теме в части 3 при обсуждении гомоморфных иерархий классов.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz