Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Конструкторы и деструкторы

Инициализация объектов класса: конструкторы

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

class my_Time {public: int hours = 0; // ошибка int minutes = 0; // ошибка};

С другой стороны, если не присвоить начальные значения элементам hours (часы) и minutes (минуты), то может возникнуть ситуация, когда при выводе на экран времени, получим, например, следущее:

-858993460:-834562789

Избежать подобную ситуацию можно, например, написав функцию, которая будет присваивать нулевые значения элементам hours и minutes, и вызывать эту функцию каждый раз сразу после объявления объекта. Но в языке С++ есть такой механизм как конструкторы. Конструктор (construct - создавать) - это специальная функция-член класса с тем же именем, что и класс. Таким образом, конструктор - это функция, но в соответствии с синтаксисом языка С++ для конструктора не определяется тип возвращаемого значения. Нельзя указывать даже void (конструктор никогда не возвращает значение).

Пример конструктора: my_Time() { hours = 0; minutes = 0; } Тогда описание класса my_Time будет следующее: class my_Time {public: // данные-члены класса int hours; int minutes; // конструктор имеет то же имя, что и класс my_Time() { hours = 0; minutes = 0; }};

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

my_Time time1;

здесь при создании объекта автоматически вызывается конструктор my_Time();. Таким образом, проинициализировать объект можно в конструкторе.

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

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

Рассмотрим небольшой пример. Опишем класс Точка (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 << " x = " << x; cout << " y = " << 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).

<== предыдущая лекция | следующая лекция ==>
Инкапсуляция (Encapsulation) | Если параметры не передаются конструктору, в определении объекта не нужно включать пустые круглые скобки
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 474; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.