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

Void main()

{

MyClass::StaticMethod();

}

#include<iostream>

using namespace std;

class MyClass

{

private:

static int CreateObjects;

static int LiveObjects;

public:

MyClass()

{

CreateObjects++;

LiveObjects++;

}

~MyClass()

{

LiveObjects--;

}

static int GetCreateObjects()

{

return CreateObjects;

}

static int GetLiveObjects()

{

return LiveObjects;

}

};

int MyClass::CreateObjects=0;

int MyClass::LiveObjects=0;

Void main()

{

MyClass obj1,obj2,obj3;

{

MyClass obj4;

}

cout<<"Create : "<<MyClass::GetCreateObjects()<<endl;

cout<<"Live : "<<MyClass::GetLiveObjects()<<endl;

}

ПЕРЕГРУЗКА ОПЕРАТОРОВ NEW И DELETE

void* operator new(size_t size) – передается в качестве параметра size –размер в байтах.

void* operator new[](size_t size)- передается в качестве параметра size –размер в байтах.

void operator delete(void* ptr)

void operator delete[](void* ptr)

Перегружать операции new и delete можно только в виде методов класса .

Поскольку в момент вызова оператора new или delete объекта ещё или уже не существует , следовательно и this ещё или уже не существует .

Поэтому , эти методы всегда неявно создаются статически .

Механизм перегрузки – аналогичен перегрузке других операций .

Вместо вызова самой операции происходит вызов самой перегрузки .

My Class *p=new MyClass;//MyClass::operator new(sizeof(MyClass));

delete p;//MyClass::operator delete(p);

Выделение и очистка памяти в языке С .

void *malloc(

size_t size

);

Size – количество байт для выделения.

Функция возвращает указатель на выделенную память или NULL в случае неудачи .

void *calloc(

size_t num,

size_t size

);

Функция calloc – динамически выделяет память под массив . И инициализирует элементы массива нулями .

Num – это количество элементов массива .

Size – это размер одного элемента в байтах .

Функция возвращает указатель на выделенную память .

void *realloc(

void *memblock,

size_t size

);

Эта функция перераспределяет блок памяти .

Содержимое объекта не изменяется при условии , что выделяемый объем памяти больше , чем предыдущий размер массива.

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

Memblock – это указатель на выделенную ранее память .

Size – это новый размер в байтах .

Функция возвращает указатель на перераспределенную память и null в случае неудачи.

void free(

void *memblock

);

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

Memblock – это указатель на ту память , которую необходимо освободить .

Для работы этих функций необходимо подключать библиотеки <stdlib.h> and <malloc.h> .

#include<iostream>

using namespace std;

class MyClass

{

static int count;

public:

void* operator new(size_t size)

{

void *ptr=malloc(size);

if(ptr!=NULL)

count++;

return ptr;

}

void operator delete(void* ptr)

{

if(ptr!=NULL)

count--;

free (ptr);

}

static int GetCount()

{

return count;

}

};

int MyClass::count;

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