logo
Шпора по информатике / 002

15.4 Конструкторы классa

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

int m=2; char name[5] = ”MIEM”; char nmas[4]= {‘M’, ‘I’, ‘E’, ‘M’};

Можно ли аналогичным образом в С++ при объявлении объектов некоторого класса осуществлять иx инициализацию? Очевидно, что простым способом нельзя, т.к. обычно объекты очень сложны и содержат множество элементов – данных. Но такая возможность очень удобна хотя бы для части данных и поэтому она есть в С++.

Реализуется такая инициализация с помощью конструкторов.

Конструктор – это особая функция, которая является элементом класса и имеет имя, совпадающее с именем класса.

Конструктор нужен для объявления объекта с конкретными начальными параметрами, т.е. с инициализацией.

Как и обычные функции классa, т.е. методы, конструктор имеет заголовок и аргументы. Если аргументов нет, то это конструктор по умолчанию.

Например, в примере раздела 13.2 (см. //10) работает конструктор :

string a ( p ) ;

При этом вызывается функция, заголовок которой имеет вид

string ( const char *u )

После заголовка , как обычно, присутствует тело функции в { . . . }, т.е. конструктора.

Это конструктор для новой строки, в которую он копирует строку, адресуемую указателем u, т.е. строку р, указанную при вызове. Хотя конструктор не возвращает никакого значения, но слово void перед его именем не нужно.Текст конструкторов может быть любым и в классе может быть несколько конструкторов, различающихся количеством или типом аргументов

(перегруженные функции, см. раздел 16.3).

Вызов конструктора происходит автоматически при объявлении, т.е. создании объекта, например, string s ( “ строка” ) ;

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

В разделе 6.4 “Работа с файлами” при открытии файлов применялись

конструкторы с параметрами, например,

ofstream fr2 (“ d:\\ Papka1\\ rez.txt” ) ;

| | |

Здесь имеем класс, объект, параметр.

В разделе 9.1 “Комплексные переменные” использовались конструкторы

класса complex, например, complex z2 ( 5 ); complex i ( 0, 1 ) ;

Если в классе не написаны конструкторы, то компилятор сам создаёт

функцию – конструктор класса. Конструктор без параметров называется

конструктором по умолчанию, например, объявление complex z ;

вызовет конструктор с заголовком complex ( )

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

Деструктор – это разрушитель объекта. Деструктор похож на конструктор, но в его заголовке перед именем класса ставится (без пробела) знак тильды ~ , например, он имеет заголовок

~ string ( void )

Обычно в текстах простых программ деструктора нет , т.к. он может создаваться автоматически.