Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_oop.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
258.05 Кб
Скачать
  1. Операторы для динамического выделения и освобождения памяти (new и delete).

Различают два типа памяти: статическую и динамическую. В статической

памяти размещаются локальные и глобальные данные при их описании в функ-

циях. Для временного хранения данных в памяти ЭВМ используется динамиче-

ская память, или heap. Размер этой памяти ограничен, и запрос на динамическое

выделение памяти может быть выполнен далеко не всегда.

Для работы с динамической памятью в языке С использовались функции

calloc, malloc, realloc, free и др. В С++ для операций выделения и освобождения

памяти можно также использовать встроенные операторы new и delete.

Оператор new имеет один операнд. Оператор имеет две формы записи:

[::] new [(список_аргументов)] имя_типа [(инициализирующее_значение)]

[::] new [(список_аргументов)] (имя_типа) [(инициализирующее_значение)]

В простейшем виде оператор new можно записать:

new имя_типа или new (имя_типа)

Оператор new возвращает указатель на объект типа «имя_типа», для ко-

торого выполняется выделение памяти. Например:

char *str; // str – указатель на объект типа char

str=new char; // выделение памяти под объект типа char

или

str=new (char);

class A

{ int i; // компонента-данное класса А

public:

A(){} // конструктор класса А

~A(){} // деструктор класса А

};

int main()

{ A *a,*b; // описание указателей на объект класса А

float *c,*d; // описание указателей на элементы типа float

a=new A; // выделение памяти для одного объекта класса А

b=new A[3]; // выделение памяти для массива объектов класса А

c=new float; // выделение памяти для одного элемента типа float

d=new float[4]; // выделение памяти для массива элементов типа float

delete a; // освобождение памяти, занимаемой одним объектом

delete [] b; // освобождение памяти, занимаемой массивом объектов

delete c; // освобождение памяти одного элемента типа float

delete [] d; // освобождение памяти массива элементов типа float

}

При удалении объекта оператором delete вначале вызывается деструктор

этого объекта, а потом освобождается память. При удалении массива объектов с

помощью операции delete[] деструктор вызывается для каждого элемента мас-

сива. В качестве аргументов можно использовать как стандартные типы дан-

ных, так и определенные пользователем. В этом случае именем типа будет имя

структуры или класса. Если память не может быть выделена, оператор new воз-

вращает значение NULL.

  1. Перегрузка и переопределение функций.

Перегруженные функции. Они имеют одинаковые имена, но разное количество и\или типы параметров.

Переопределённые функции. У них совпадает сигнатура (имя + параметры).

Они имею разную реализацию.

class A

{

int i;

public:

A(int ii = 0) {i = ii;}

void show() {cout<<i<<endl;}

};

class B:A

{

int j;

public:

B(int ii = 0, int jj = 1):A(ii) {j=jj;}

void show()

{cout<<j<<endl;

A::show();

}

};

void main()

{ A obj(5);

obj.show();

B obj2(7,4);

obj.show();

}

//На экране будет

5 4 7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]