06 классы 4
.pdf06 – 011
// ДВП в стиле С++
p = new T; |
// |
динамическое |
ВП |
... |
// |
освобождение |
ВП |
delete p; |
// ДВП в стиле С
q = (T *) malloc(sizeof(T));
...
free(q);
...
}
06 – 012
Свойства операций ДВП:
1)Недостаток памяти:
•указатель NULL
•выброс "исключения"
2)ДВП с инициализацией:
p = new
тип_объекта(начальное_значение);
06 – 013
3)ДВП для массива:
одномерный массив:
p = new тип_объекта[размер_массива];
delete [] p;
двумерный массив:
p = new тип_объекта[размер1][размер2];
06 – 014
2.15.Статические элементы класса
•Ключевое слово static.
Пример: |
|
|
class Worker { |
// |
имя |
char *name; |
||
char *fam; |
// |
фамилия |
//Cтатическое ДЭ – число
//созданных объектов
static int count;
06 – 015
public:
Worker(char *, char *); ~Worker();
char * getName(); char * getFam();
//Cтатическая ФЭ для доступа к
//закрытым ДЭ; возвращает число
//созданных объектов
static int getCount(); };
06 – 016
//Дополнительное определение и
//инициализация статических ДЭ
int Worker::count=0; // Cтатическая ФЭ
int Worker::getCount()
{
return count;
}
06 – 017
Worker::Worker(char *n, char *f)
{
name = new char [strlen(n)+1]; strcpy(name, n);
fam = new char [strlen(f)+1]; strcpy(fam, f);
// Инкремент счетчика сотрудников
++count;
cout << ”Конструктор объекта ”; cout << name << ’ ’<< fam << endl;
}
06 – 018
Worker::~Worker()
{
cout << ”Деструктор объекта ”; cout << name << ’ ’<< fam << endl; delete [] name;
delete [] fam;
// Декремент счетчика сотрудников
––count;
}
06 – 019
char * Worker::getName()
{
return name;
}
char * Worker::getFam()
{
return fam;
}
06 – 020
int main()
{
cout << ”Счетчик перед созданием объектов = ”;
//Вызов статической ФЭ через имя
//класса, т.к. еще нет объектов
cout << Worker::getCount() << endl;
