- •Лекции по Объектно-ориентированному программированию.
- •Классы.
- •Квалификаторы доступа.
- •Инициализация полей данных.
- •Операторы new и delete.
- •Перегруженные функции.
- •Конструктор копирования.
- •Статические компоненты класса.
- •Дружественные функции.
- •Перегрузка операций.
- •Наследование.
- •Производные классы. Доступ к базовым классам.
- •Возможны следующие варианты доступа:
- •Конструкторы и деструкторы в иерархии классов.
- •Виртуальные функции.
- •Virtual тип_возвр_знач-я имя_функции (параметры)
- •Потоки ввода / вывода.
- •Операции помещения и извлечения.
Операторы 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);}