АРХИВ ЗАПИСЕЙ  ●  УЧИМ C++

Переопределение операторов - одна из наиболее интересных тем, поскольку в ней в полной мере проявляется краса и гибкость языка программирования С++. Идею, положенную в основу концепции переопределения операторов, проиллюстрируем на простом примере. Допустим, что для работы с ком­плексными числами создается специальный класс (на самом деле в С++ для работы с комплексными числами существует класс complex, однако в дан­ ном случае это не принципиально).

Классы используются в основном для того, чтобы скрыть от пользователя доступ к членам класса - именно поэтому по умолчанию все члены клас­са являются закрытыми. В качестве иллюстрации рассмотрим простой пример. Рассмотрим процесс вычисления экспоненты. Для записи экспоненты и ее аргумента используем поля класса.

Рассмотрим сложный случай, когда полем класса является массив объектов другого класса. В программе реализуется последовательность чисел Фибоначчи - очень экзотическим способом. В программе описывается класс Inner, у которого два целочисленных поля m и number.

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

В примере реализуется вычисление экспоненты оригинальным способом. Для этих целей создается класс, у которого имеется поле - динамический массив. Элементами массива являются сла­гаемые ряда, через который вычисляется экспонента. Массив заполняется при создании соответствующего объекта.

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

Конструктор создания ко­пии - это конструктор, аргументом которого является объект того же класса. Объект-аргумент конструктора передается только по ссылке. Причина кро­ется в том, что конструктор создания копии вызывается при инициализации объекта. Напомним, что в этом случае конструктором создается безымянный объект, который затем интерпретируется как создаваемый (инициализируемый при объявлении).

Конструктор класса вызывается ав­томатически при объявлении объекта класса. Это вовсе не означает, что после создания объекта нельзя еще раз вызвать конструктор. Для по­нимания механизмов возможного использования конструктора (кроме автоматического его вызова при объявлении объекта) необходимо при­нять к сведению, что вызов конструктора подразумевает создание объ­екта соответствующего класса.

Совместное использование конструкторов и деструкторов нередко приводит к неожиданным результатам. Обратите внимание, что в конструкторе и де­структоре, помимо текстового сообщения о создании или удалении объекта, указывается также и его адрес. Адрес объекта в обработке получается с помощью указателя this.

При выгрузке объекта из памяти автоматически вызывается метод, который называется деструктором. Деструкторы, как и конструкторы, можно явно описывать при создании класса. Правила создания деструкторов еще более консервативны, чем правила создания конструкторов. Они следующие: имя деструктора совпадает с именем класса, но перед именем де­ структора указывается символ «тильда» ~; тип результата для деструктора не указывается (как и для контруктора); у деструктора нет аргументов.

« 1 2 3 4 ... 23 24 »
Онлайн всего: 15
Гостей: 15
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте