На этом шаге мы приведем общие сведения об указанных классах.
Начиная с этого шага, мы начнем описывать классы подмножеств элементов массивов значений. Но поскольку эти классы очень просты и поддерживают небольшое количество операций, будут приведены только их объявления с комментариями.
Объекты класса 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.