На этом шаге мы приведем общие сведения об указанных классах.
Начиная с этого шага, мы начнем описывать классы подмножеств элементов массивов значений. Но поскольку эти классы очень просты и поддерживают небольшое количество операций, будут приведены только их объявления с комментариями.
Объекты класса slice_array создаются при передаче среза slice в индексе неконстантного массива значений:
namespace std { template <class T> class valarray { public: . . . . . slice_array<T> operator[](slice); . . . . . }; }
Ниже приведено точное определение открытого интерфейса класса slice:
namespace std { class slice { public: slice (); // Пустое подмножество slice (size_t start, size_t size, size_t stride); size_t start () const; size_t size () const; size_t stride () const; }; }
Конструктор по умолчанию создает пустое подмножество. Функции start(), size() и stride() предназначены для получения свойств среза.
Класс slice_array поддерживает следующие операции:
namespace std { template <class T> class slice_array { public: typedef T value_type; void operator= (const T&); void operator= (const valarray<T>&) const; void operator*= (const valarray<T>&) const; void operator/= (const valarray<T>&) const; void operator%= (const valarray<T>&) const; void operator+= (const valarray<T>&) const; void operator-= (const valarray<T>&) const; void operator^= (const valarray<T>&) const; void operator&= (const valarray<T>&) const; void operator|= (const valarray<T>&) const; void operator<<= (const valarray<T>&) const; void operator>>= (const valarray<T>&) const; ~slice_array(); private: slice_array(); slice_array(const slice_array&); slice_array& operator= (const slice_array&); ... }; }
Учтите, что класс slice_array проектировался исключительно как внутренний вспомогательный класс для работы со срезами, который должен оставаться невидимым для внешних пользователей. По этой причине все конструкторы и операторы присваивания класса slice_array<> объявлены закрытыми.
На следующем шаге мы рассмотрим классы gslice и gslice_array.