Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по прогр.ч.2.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
293.89 Кб
Скачать

Лекция 3

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

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

Синтаксис определения конструктора внутри класса:

<имя класса>(<список формальных параметров>)

{<операторы>}

  1. Имя конструктора должно совпадать с именем класса.

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

  3. Класс может иметь несколько конструкторов с разными параметрами (перегрузка функций).

  4. Параметры конструктора могут иметь любой тип, кроме этого же класса.

  5. Если программист не указал ни одного конструктора, компилятор создает его автоматически.

  6. Конструкторы не наследуются.

Пример. Определим конструктор для класса complex1:

complex1(double re=0.0,double im=0.0)

{real=re;image=im;}

Форматы вызова конструктора

  1. <имя класса><имя объекта>(<список параметров>);

  2. <имя класса>(<список параметров>)

  3. <имя класса><имя объекта>=<выражение>;

Например:

complex1 s(10.3,0.22);

/* создание объекта s типа complex1 и инициализация его полей с помощью конструктора:s.real=10.3,s.image=0.22 */

Второй формат вызова конструктора приводит к созданию объекта без имени. Список параметров может быть пустым.

Например:

complex1 z=complex1(4.0,5.0);

/* создается безымянный объект типа complex1 с параметрами real=4.0,image=5.0, а затем он копируется в память, выделенную под объект z */

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

Например:

complex1 y=10.0;

/* создается безымянный объект со значением поля real =10.0, который копируется в память, выделенную под объект y. */

Пример. Описать класс “комплексное число” , содержащий действительную , мнимую части, конструктор, функции доступа к полям класса. В программе предусмотреть сложение двух комплексных чисел.

#include<iostream.h>

#include<conio.h>

class cmp

{float real,image;

public:

cmp(float a,float b)

{real=a; image=b;}

float getreal()

{return real;

}

float getimage()

{return image;}

};

void sum(cmp x,cmp y)

{cout<<x.getreal()+y.getreal();

cout<<"\n"<<x.getimage()+y.getimage();

}

void main()

{cmp c1(10.0,20.0);

cmp c2(20.0,30.0);

sum(c1,c2);

getch();

}

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

  1. передача значений параметров в тело конструктора(рассмотрели);

  2. применение списка инициализаторов данных объекта.

Синтаксис определения конструктора во втором случае следующий:

<имя класса>(<список параметров):<список инициализаторов>

{<тело конструктора>}

.Каждый инициализатор имеет вид:

<имя поля>(<выражение>)

Пример:

#include <iostream.h>

class a

{ public:

int i;

float e;

char c;

//конструктор

a(int in,float en,char cn):

i(5),e(i*en+in),c(cn)

{}

};

void main()

{a object(2,3.0,’d’);

cout<<”\n”<<object.i<<” “<<object.e<<” “<<object.c<<”\n”;

}

Конструктор записал в поля объекта а значения: i=5,e=17,c='d'.

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

Деструктор-это метод класса, который используется для разрушения объекта этого класса. Он освобождает память, выделенную под объект.

Если в классе не определен деструктор, компилятор генерирует деструктор по умолчанию.

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

~<имя класса>() {<операторы>}

1.Имя деструктора должно совпадать с именем класса.

2.Деструктор не имеет возвращаемого значения.

3.Деструктор не имеет параметров.

4.Деструктор не может быть перегружен.

Пример.

class cmp

{double real,image;

public:

cmp(double re, double im)

{real=re;

image=im;

}

~cmp();

void display();

};