Главная Обратная связь

Дисциплины:






Основное назначение конструкторов - инициализация объектов



Типичная ошибка программирования.Попытка объявить тип возвращаемого значения для конструктора или возвратить значение из конструктора.

С помощью параметров конструктору можно передать любые данные, необходимые для инициализации объектов класса.

Рассмотрим небольшой пример. Опишем класс Точка (Point), который будет содержать координаты точки в двумерной системе координат, функцию вывода координат точки на экран, функцию смещения точки относительно нового центра координат. Затем, просто создадим одну точку и выведем ее координаты на экран. После пересчитаем координаты точки относительно нового центра и снова выведем данные на экран.

#include <iostream.h> // описание класса Pointclass Point { int x, y; // координаты точки, по умолчанию имеют // уровень доступа privatepublic: // конструктор присваивает переменным класса x и y начальные // значения соответственно x0 и y0 Point(int x0, int y0) { x = x0; y = y0; } // функция вывода координат точки на экран void ShowPoint() { cout << "\nx = " << x; cout << "\ny = " << y; } // функция пересчета координат точки относительно нового центра // с координатами в точке (x0, y0) void OffsetXY(int x0, int y0) { x -= x0; y -= y0; }}; void main(){ Point A(1,3); // создаем точку А (объект типа Point) // с координатами x = 1, y = 3 (вызывается конструктор Point(1, 3) A.ShowPoint(); // выводим координаты точки А на экран A.OffsetXY(2,2); // переносим центр координат в точку (2,2) A.ShowPoint(); // показываем новые координаты точки А}

Обратите внимание, при определении объекта значения параметров передаются конструктору с использованием синтаксиса, подобного обычному вызову функции.

Point A(1,3);

Такое определение создает экземпляр A класса Point, вызывая конструктор класса с параметрами (1,3).

Использование конструкторов с аргументами по умолчанию

Конструктор без параметров называют конструктором по умолчанию. Такой конструктор обычно присваивает переменным-членам класса наиболее часто используемые значения. Например, в описанном выше примере класса my_Time используется конструктор по умолчанию.

my_Time() { hours = 0; minutes = 0; }

В нем переменным hours и minutes присваиваются нулевые значения. Таким образом, после создания экземляра объекта типа my_Time, он будет содержать вполне допустимые значения, а не "мусор".

Для каждого класса может существовать только один конструктор по умолчанию.

Если для класса не определено никакого конструктора, компилятор создает конструктор по умолчанию. Такой конструктор не задает никаких начальных значений. Поэтому, если необходимо, чтобы перед использованием объекта данным-членам класса были присвоены начальные значения или же нужно выполнить другие задачи инициализации, например, динамически выделить память под объект, то Вы должны будете определить собственный конструктор.

Если класс имеет конструктор по умолчанию (определенный программистом или созданный компилятором), можно определить объект класса без передачи параметров, например:

my_Time time1;




sdamzavas.net - 2020 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...