Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Аленский. лекции по проге.doc
Скачиваний:
19
Добавлен:
11.11.2018
Размер:
1.35 Mб
Скачать

§ 3. Создание объектов. Конструктор

Объект — это переменная типа класс. Класс — это абстрактное понятие, шаблон, заготовка для создания объекта. Оперативная память для класса, как и для другого типа, не отводится. Объект существует реально, физически после его создания, то есть он занимает определённую оперативную память.

Объявляется объект одним из следующим способов:

  • имя_класса имя_объекта (параметры), если конструктор имеет параметры;

  • имя_класса имя_объекта, если конструктор не имеет параметров или все параметры имеют значения по умолчанию или конструктора нет.

В любом случае, во-первых, создаётся объект и, во-вторых, вызывается конструктор, если он есть. В первом варианте конструктору передаются параметры.

Конструктор — это специальная функция, которая служит для инициализации, т. е. задания начальных значений всех (прим. 1) или некоторых (прим. 2) полей класса. В прим. 2 с помощью конструктора задали только размерность массива, а массив определили с помощью функции класса. Теоретически в этой функции разрешается выполнять любые действия, но это делать не рекомендуется. Конструктор обладает следующими особенностями:

  • он не имеет никакого типа возвращаемого значения, в том числе void;

  • имя конструктора совпадает с именем класса;

  • вызывается конструктор автоматически при объявлении объекта. Благодаря последним двум особенностям конструктор обязательно будет выполнен, так как мы не можем забыть объявить объект, а значит вызвать конструктор. В противном случае компилятор напомнит нам об этом.

Конструктор может быть с параметрами или без них. В первом случае число 10 (см. прим. 1) через параметр x передаётся в качестве значения поля a по следующей “цепочке”: 10 –> x –> a. Аналогично число 2 инициализирует поле b: 2 –> y –> b. То есть числа 10 и 2 играют роль фактических параметром при вызове специальной функции, которой является конструктор. При вызове методов повторно передавать эти же значения, как это имело место в случае самостоятельных функций, не членов класса, не надо.

Если конструктор не имеет параметров, то поля класса можно определить с помощью констант. Например, в прим. 1 конструктор может быть таким:

FirstCl { a=2; b=5;}

Тогда вызывается он так: FirstCl obj; т. е. поля из головной функции не передаются, так как они определены с помощью констант в тексте конструктора.

Параметры конструктора, как и любой другой функции (см. § 6 гл. 2), могут иметь значения по умолчанию. Например, в первом примере заголовок конструктора может быть таким: FirstCl ( int x=2, int y=5). Его текст при этом не меняется. Тогда объявить объект и вызвать конструктор можно одним из следующих способов:

  1. FirstCl obj1; поля получат значения a=2, b=5;

  2. FirstCl obj2 (30); значения полей будут такими: a=30, b=5;

  3. FirstCl obj3 (30, 40); поля получат значения a=30, b=40;

Конструктор, как и любая другая функция (см. § 6 гл. 2), может быть перегружен, то есть можно записать несколько конструкторов, которые отличаются параметрами. Например, в одном и том же классе можно записать два следующих конструктора с одинаковыми, конечно, именами, совпадающими с именем класса:

FirstCl { a=2; b=5;} и FirstCl (int x, int y) { a=x; b=y; };

Тогда объявить объект можно одним из следующих способов:

  1. FirstCl obj; при этом поля получат значения 2 и 5;

  2. int X, Y ; cin>>X>>Y ; FirstCl obj (X, Y); при этом поля будут проинициализированы введёнными значениями.

Но вместо такой перегрузки конструктора лучше использовать параметры по умолчанию.