Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций по курсу 'Информатика'.doc
Скачиваний:
11
Добавлен:
14.07.2019
Размер:
483.84 Кб
Скачать

Конструктор.

Для наглядности и упрощения процесса инициализации данных используется специальная функция – конструктор. Может ли быть класс без конструктора? – Да, но всегда будет функция выполняющая его назначение.

Конструктор – это специальная функция, которая имеет такое же имя как класс, производит

- распределение памяти и инициализацию данных (объектов класса).

- не объявляется как void, не имеет возвращаемого значения.

- каждый раз, когда main() создает переменную класса, вызывается конструктор.

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

class cvec { // объекты класса

int *m ; // адрес вектора

int k ; // его размер

// методы

public: cvec( int ) ; // конструктор

}

cvec::cvec ( int d)

{ k=d ;

m=(int *)malloc(k*sizeof(int)) ; или иначе m= new int[k] ;

}

функция malloc или операция new распределяют память на вектор размерности k, но не заполняют его.

Рассмотрим другой конструктор, который распределяет память на вектор размерности d и заполняет его. В классе могут присутствовать оба, т.е. конструктор может быть перегружен.

cvec::cvec ( int *x, int d)

{ k=d ;

m=(int *)malloc(k*sizeof(int)) ;

for (int i=0 ; i<k ; i++) // заполнение вектора.

*(m+i)=*(x+i) ;

}

При создании конструктора часто бывает удобно использовать параметры по умолчанию, например.

cc::cc (int a=10, int b=20)

{ … }

main()

{ cc x() , y(1, 2) ;

}

При создании объектов х будет использовать параметры по умолчанию 10 и 20, а у будет создаваться, используя параметры 1 и 2.

ДЕСТРУКТОР.

Деструктор – специальная функция, которая очищает память, используя специальную

операцию delete для очистки памяти, распределенной new,функцию free для очистки

памяти, распределенной malloc.

- имеет такое же имя как класс, со специальным символом ~ «тильда».

- не имеет возвращаемого значения и параметров, не объявляется как void.

Деструктор может выглядеть так:

~cvec::cvec ( )

{ delete m ; }

ПРИМЕР КЛАССА ОТРЕЗОК.

#include<conio.h>

#include<math.h>

#include<graphics.h>

class cline

{ // объекты

int x1, y1 ;

int x2, y2 ;

float len ;

public: cline(int, int, int, int) ; // методы

void draw() ;

void extend (int) ;

int getlen() { return len ;}

}

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

cline::cline ( int a, int b, int c, int d)

{ x1=a ; y1=b ; x2=c ; y2=d ;

int dx = x2-x1 ;

int dy = y2-y1 ;

len= sqrt(dx*dx + dy*dy) ;

}

// удлинение отрезка

void cline::extend ( int d)

{ int dx = x2-x1 ;

int dy = y2-y1 ;

float cx = dx / len ;

float cy = dy / len ;

len = len + d ;

dx = len *cx ;

dy = len *cy ;

x2 = x1 + dx ;

y2 = y1 + dy ;

}

// рисование отрезка

void cline::draw ()

{ line(x1, y1, x2, y2) ; }

// работа с классом

main()

{

cline L(100, 100, 200, 200) ; // создание отрезка с указанными координатами

int gdriver=DETECT, gmode ;

initgraph (&gdriver, &gmode, “”) ;

L.draw() ; // рисование отрезка

getch() ;

L.extend ( L.getlen() + 50) ; // удлинение его на 50

L.draw () ; // рисование удлиненного отрезка

getch() ;

closegraph() ;

}