- •Void Print();
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main ()
- •Void main ()
- •Void main ()
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;