- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Конструктор.
Для наглядности и упрощения процесса инициализации данных используется специальная функция – конструктор. Может ли быть класс без конструктора? – Да, но всегда будет функция выполняющая его назначение.
Конструктор – это специальная функция, которая имеет такое же имя как класс, производит
- распределение памяти и инициализацию данных (объектов класса).
- не объявляется как 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() ;
}
