Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Лекции по объектно-ориентированному программированию (С++).doc
Скачиваний:
150
Добавлен:
02.05.2014
Размер:
226.82 Кб
Скачать

Операторы new и delete.

newдля выделения памяти.

delete для освобождения памяти.

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

char* PChar*,string;

int *PInt;

double *PDouble;

Pchar = new char;

Pint = new int;

Pdouble = new double;

*PChar = ‘ a’;

*PInt = 10;

*PDouble = 2.3+E2; потом cout << ... ...

delete PChar; // Освобождаем память

---- // ----

---- // ----

string = new char [25]; // массив из 25 элементов

delete [ ]string;

Перегруженные функции.

возвращаемое_значение имя_функции (список параметров);

это прототип функции (main)

main ( )

{

/ * вызов */ имя_функции (аргументы);

}

возвращаемое_значение имя_функции (---- // ----)

main ( )

{int a,b,c, max_el (int, int);

cin >> a >> b;

c = max_el (a, b);

cout << c;

}

int max_el (int aa, int bb)

{ if (aa > bb) return aa;

else return bb;

}

float max_el (float aa, float bb)

{if (aa > bb) return aa;

else return bb; }

template <class T> // символьное имя – универсальный тип данных

T max_el (Ta,Tb)

{ if (a >b) return a;

else return b;

}

<string.h>

Class TObject {protected : float x;

float y;

char *name;

public : TObject ( )

{name = new char[sizeof (“No name”)]; // конструктор по умолчанию

strcopy (name, “No name”);

x =0;

y =0; }

TObject (float x1, float y1, char*name1) // пример перегрузки компьютера

{name = new char[strlen (name1)+1]; // второй конструктор

strcopy (name, name1);

x =x1;

y =y1;}

float & coord_x ( ) {return x;}

float & coord_y ( ) {return y;}

void show_name ( )

{cout << ”название объекта” <<name <<endl;}

void show_coord ( )

{cout << ”размер х = ”<< x <<endl;

cout << ”размер y = ”<< y <<endl;}

~ TObject {delete name;} – деструктор

}; // конец определения класса.

main ( )

{ TObject ob; 1;

TObject automat (15, 30, “UZI”);

obj1.show_name ( ); // No name

obj1.show_coord ( ); // размер х=0, у=0

automat.show_name ( ); // UZI

В определении класса мы поместили 2 конструктора: первый – по умолчанию, которое позволяет инициализировать поля объекта и выделить под него динамическую память оператор new при вызове конструктора без аргументов. А второй конструктор с инициализацией и выделением динамической памяти по аргументам.

Если конструктор не определен в классе, то компилятор языка создает свой конструктор по умолчанию. Тогда инициализация переменных происходит без параметров. Еще один способ инициализации полей объекта – через список инициализации.

TObject (float x1,float y1,char*name)

{... ...}

TObject (---- // ---- // ----// ----) : x (x1), y (y1)

{name = new char [strlen (name1) +1 ];

strcpy (name, name 1);}