Объективное программирование — страница 10

  • Просмотров 9326
  • Скачиваний 351
  • Размер файла 45
    Кб

резервирования памяти и т.д.. Неявно вызываемые функции при создании и уничтожении объектов класса называются конструкторами и деструкторами. Они определяются как элементы-функции класса и имена их совпадают с именем класса. Конструкторов для данного класса может быть сколь угодно много, если они отличаются формальными параметрами, деструктор же всегда один и имеет имя ~<имя класса>. С процессом создания объектов связано

понятие их инициализации. Инициализировать объекты обычным способом нельзя. Их инициализация осуществляется либо явным присваиванием (копированием) другого объекта, либо неявным вызовом конструктора. Если конструктор имеет формальные параметры, то в определении переменной после ее имени должны присутствовать в скобках значения фактических параметров. Момент вызова конструктора и деструктора определяется временем

создания и уничтожения объектов: - для статических объектов - конструктор вызывается перед входом в main(), деструктор - после выхода из main(). Конструкторы вызываются в порядке опредлеления объектов, деструкторы - в обратном порядке; - для автоматических объектов - конструктор вызывается при входе в функцию (блок), деструктор - при выходе из него; - для динамических объектов - конструктор вызывается при выполнении оператора new,

деструктор - при выполнении оператора delete. В Си++ возможно определение массива объектов класса. При этом конструктор и деструктор вызываются для каждого элемента массива и не должны иметь параметров. При выполнении оператора delete для ссылки на массив объектов необходимо также указывать его размерность. Конструктор для массива объектов должен быть без параметров. //--------------------------------------------------------#include <stdio.h> #include <dos.h> static int

days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; class dat { int day,month,year; public: dat(int,int,int); // Конструктор с параметрами // (возможно умолчание) dat(char *); // Конструктор с одним параметром dat(); // Конструктор без параметров ~dat(); // Деструктор }; //------- Конструктор с параметром - текстовая строка ---------dat::dat(char *s) { int i; char ss[80]; strcpy(ss,s); for (i=0; ss[i] !=0; i++) if (ss[i]=='-') ss[i]=','; // Замена '-' на ',' sscanf(ss,"%d%d%d",&day,&month,&year); } // Конструктор с тремя параметрами (по умолчанию 0 - текущая дата)

dat::dat(int d=0, int m=0, int y=0) { struct date x; getdate(&x); // Стандартная функция получения // текущей даты // Проверка на значение по умолчанию year = (y == 0) ? x.da_year : y; month= (m == 0) ? x.da_month: m; day = (d == 0) ? x.da_day : d; } //------ Конструктор без параметров --------------------------dat::dat() { struct date x; getdate(&x); // Стандартная функция получения // текущей даты year = x.da_year ; month= x.da_month; day = x.da_day ; } //------ Деструктор ------------------------------------------dat::~dat() { printf("Дата ==> %2d-%2d-%4d\n",day,month,year); }