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



         

Объектно-ориентированный подход - часть 6


Вот как выглядит реализация операции взятия индекса:

IntArrayRC::operator[]( int index )

{

    check_range( index );

    return _ia[ index ];

}

А вот реализация встроенной функции check_range():

#include <cassert>

inline void IntArrayRC::check_range(int index)

{

    assert (index>=0 && index < _size);

}

(Мы говорили о макросе assert() в разделе 1.3.)

Почему проверка индекса вынесена в отдельную функцию, а не выполняется прямо в теле оператора взятия индекса? Потому что, если мы когда-нибудь потом захотим изменить что-то в реализации проверки, например написать свою обработку ошибок, а не использовать assert(), это будет сделать проще.

В каком порядке активизируются конструкторы при создании производного класса? Первым вызывается конструктор базового класса, инициализирующий те члены, которые входят в базовый класс. Затем начинает работать конструктор производного класса, где мы должны проинициализировать только те члены, которые являются специфичными для подкласса, то есть отсутствуют в базовом классе.

Однако заметим, что в нашем производном классе IntArrayRC нет новых членов, представляющих данные. Значит ли это, что нам не нужно реализовывать конструкторы для него? Ведь вся работа по инициализации членов данных уже проделана конструкторами базового класса.

На самом деле конструкторы, как и деструкторы или операторы присваивания, не наследуются – это правило языка С++. Кроме того, конструктор производного класса обеспечивает механизм передачи параметров конструктору базового класса. Рассмотрим пример. Пусть мы хотим создать объект класса IntArrayRC следующим образом:

int ia[] = {0,1,1,2,3,5,8,13};

IntArrayRC iarc(ia,8);

Нам нужно передать параметры ia и 8 конструктору базового класса IntArray. Для этого служит специальная синтаксическая конструкция. Вот как выглядят реализации двух конструкторов IntArrayRC:

inline IntArrayRC::IntArrayRC( int sz )

    : IntArray( sz ) {}

inline IntArrayRC::IntArrayRC( const int *iar, int sz )




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