Деструктор
Конструкторы
Снова ввод значений
Ввод значений последовательности
seq.input(0); // нулевое значение
seq.input(1); // первое значение
...
seq.print(); // печать последовательности
CBitSequence * pseq = &seq; // указатель на объект
pseq->input(3); // косвенный выбор
pseq->input(4);
pseq->print(); // печать после модификации
(*pseq).input_all(); // уточнение имени с разыменованием указателя
(*pseq).print();
...
Эскиз определения класса CBitSequence представлен ниже (определение класса, безусловно, далеко от «совершенства», но для понимания способов доступа к компонентам объектов вполне достаточно).
class CBitSequence {
public:
explicit CBitSequence(int len);
CBitSequence(const CBitSequence &);
~CBitSequence() { delete[] __items; }
void print();// печать последовательности
void input(int index); // ввод элемента с заданным индексом
void input_all(void); // ввод всех элементов сразу
private:
bool * __items;
const int __len;
};
Существует еще один способ обращения к компонентам объектов – через указатели на компоненты. Указатель на компонент класса – особый вид указателей, который можно «привязать» к компоненту класса с заданным форматом (прототипом). Значением такого указателя является «связь» с компонентом класса. Указатель на компонент можно определить согласно следующему обобщенному формату:
value_type (class_id::*pointer_id) initializer // для данных
value_type (class_id::*pointer_id) (parameters) initializer // для функций,
где value_type – тип компонента (для компонентной функции – тип возвращаемого значения); class_id – имя класса, pointer_id – имя указателя на компонент; initializer – инициализирующее выражение; parameters – список параметров компонентной функции. Формат инициализатора имеет вид
= &class_id::member_id,
где member_id – имя некоторого компонента класса, формат которого удовлетворяет определению указателя на компонент.
Обращение к компоненту объекта через указатель на компонент реализуется операциями .* и –>*. Обе эти операции бинарные и в качестве правого операнда ожидают указатель на компонент. Левым операндом у первой из них должна быть ссылка на объект класса, а у второй – указатель на объект класса. Форматы обращения через указатели на компоненты будут следующими:
object_id.*pointer_id // для данных
object_id.*pointer_id(arguments) // для функций.
Если имеется указатель на объект (pointer_to_object), то обратиться к компонентам объекта можно так:
pointer_to_object–>*pointer_id // для данных
pointer_to_object->*pointer_id(arguments) // для функций
(*pointer_to_object).*pointer_id // для данных
(*pointer_to_object).*pointer_id(arguments) // для функций.
Теперь рассмотрим пример использования указателей на компоненты. В примере воспользуемся уже определенным выше классом CBitSequence, моделирующим двоичные последовательности.
Пример
...
CBitSequence seq; // создание двоичной последовательности
CBitSequence * pseq = &seq; // указатель на объект
...