89790

Конструктор и деструктор

Лекция

Информатика, кибернетика и программирование

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

Русский

2015-05-13

85.41 KB

2 чел.

Конструктор и деструктор

Содержание

  1.  Конструктор
  •   в struct
  •   в class
  •   конструктор по умолчанию
  •   копирующий конструктор
  1.  Деструктор

Конструктор

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

имя_класса ( список_формальных _параметров) { операторы_тела _конструктора }

  •  Нельзя получить адрес конструктора;
  •  Параметром конструктора не может быть его собственный класс, но может быть ссылка на него;
  •  Конструктор нельзя вызывать как обычную компонентную функцию.

Вызов конструктора:

имя_класса имя_объекта (не_пустой_список_фактических_параметров_конструктора);

имя_класса  * имя_указателя_на_объект_класса = new имя_класса (фактические_параметры_конструктора);

Конструкторы вызываются всякий раз, когда создается объект данного класса. Если список параметров пуст, то скобки можно не ставить, при этом вызывается конструктор по умолчанию. Конструктор с одним аргументом может производить преобразование типов, если при объявлении такого конструктора не используется ключевое слово explicit.

Рассмотрим конструкторы на примере класса goods:

class goods{

float price;

char *name;

int coun;

char prod[50];

}

Конструктор по умолчаниюэто конструктор без параметров. Его можно не определять, но в случае описания массива экземпляров класса, или если в классе описаны поля как указатели, то память автоматически не выделится, поэтому конструктор по умолчанию нужно обязательно прописать!

Пример конструктора по умолчанию:

goods(){

name=new char[1];  

name[0]='\0';

prod[0]='\0';

coun=0;

price=0.0;}

Перегрузка конструкторов

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

Инициализация данных объекта:

  •  с помощью конструктора через передачу значений параметров в тело конструктора
  •  применение списка инициализаторов данных объекта, который помещается между списком параметров и телом конструктора:

Имя_класса (список_параметров): список_инициализаторов_компонентных_данных {тело_конструктора};

Пример перегруженного конструктора со списком инициализаторов:

goods(float p, int c): coun(c), price(p){ name=new char[1]; name[0]='\0'; prod[0]='\0';}

goods(char *new_name, float new_price):coun(1), price(new_price){

name=new char [strlen(new_name)+1];

strcpy(prod,"magazine"); strcpy(name,new_name); }

Копирующий конструктор

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

Для корректной работы программы нужно описать копирующий конструктор.

Копирующим называется конструктор, который в списке параметров содержит параметр типа определяемого класса:

имя_класса (const имя_класса &);

имя_класса (const имя_класса &, int=0);

Вызов копирующего конструктора производится так

имя_класса имя1_объекта_типа_класс = имя2_объекта_типа_класс;

имя_класса имя1_объекта_типа_класс(имя2_объекта_типа_класс);

Пример копирующего конструктора:

goods (const goods& f){

name=new char[strlen(f.name)+1];

strcpy(name, f.name);

coun=f.coun;

price=f.price;

strcpy(prod, f.prod);}

Деструктор (разрушитель объектов)

Компонентная функция, предназначенная для освобождения памяти при уничтожении динамически созданного объекта, называется деструктором и имеет формат:

~имя_класса() {операторы_тела деструктора};

  •  Деструктор не имеет параметров (даже типа void).
  •  Деструктор не имеет возвращаемого значения.
  •  Вызов деструктора выполняется неявно, автоматически, как только объект класса уничтожается или завершается выполнение программы.

Пример описания деструктора:

~goods()

{

  delete name;

}

Пример # 3. Товары склада

#include <iostream>

#include <string.h>

using namespace std;

class goods{

float price;

char *name;

int coun;

char prod[50];

public:

goods(){

name=new char[1];  

name[0]='\0';

prod[0]='\0';

coun=0;

price=0.0;}

goods(float p, int c): coun(c), price(p){

name=new char[1]; name[0]='\0'; prod[0]='\0';}

goods(char *new_name, float new_price):coun(1), price(new_price){

name=new char [strlen(new_name)+1];

strcpy(prod,"magazine"); strcpy(name,new_name); }

goods (const goods& f){

name=new char[strlen(f.name)+1];

strcpy(name, f.name);

coun=f.coun;

price=f.price;

strcpy(prod, f.prod);}

~goods()

{

  delete name;

}

//Метод для вывода данных

void show(){ cout << name << ":“ << prod << «->“ << price << "*“ <<  

coun << "=“  << price*coun << endl;

}

};

//Главная программа

int main()

{

goods a("name",12.5);

goods c(56.0,100), d;

goods b=a;

a.show();    c.show();

d.show();    b.show();

return 0;

}

Пример #4. Символьная строка

Создадим класс «символьная строка». Определим следующие компоненты класса:

  •  Указатель на текстовую строку
  •  Длина строки
  •  Печатает информацию о строке

//stroka.cpp

#include <string.h>

#include <iostream.h>

#include <locale.h>

class stroka

{//скрытые от внешнего доступа данные

char *ch;

int len;

public://конструкторы объектов класса

stroka (int N=80): len(0)

{// выделяем память для массива строк

ch=new char[N+1];  ch[0]=‘\0’;}

// создает объект по заданной строке

stroka (const char *arch)

{len=strlen(arch); ch=new char[len+1]; strcpy(ch,arch);}

int& len_str(void)//возвращает ссылку на длину строки

{return len;}

char *strings(void)//возвращает указатель на строку                

{return ch;}

void display(void)//печатает  информацию о строке

{cout<<“\nДлина строки:”<<len;

cout<<“\nСодержимое строки:”<<ch;}

//Деструктор-освобождает память объекта

~stroka() { delete [] ch;} };

int main()

{

setlocale(LC_ALL,Russian”);

stroka s1,s2(5),s3("infoznaika");

cout << "Dlina stroki "<< s3.strings()<< "="<<s3.len_str()<< endl;

s2.display();

return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

21747. Обслуживание рабочих мест 23.5 KB
  Различают рабочие места: стационарные полустационарные подвижные Особенность горного производства: рабочие места подвижные и протяжённые. Организация рабочего места включает их планировку и оснастку. Правильное планирование заключается в приспособлении рабочего места средств труда и производственной среды к возможностям человека. Под технологической оснасткой понимают обеспечение рабочего места исправным производственным оборудованием и инструментом.
21748. Передовые методы организации работ по добыче полезного ископаемого 66 KB
  Структура рабочих мест на участке: начальник участка – 1 чел.; заместитель начальника участка – 1 чел.; геолог – 1 чел.; маркшейдер – 1 чел.
21750. Организация и планирование ремонта оборудования 24 KB
  Основными задачами ремонтных работ на шахте являются: обеспечение безаварийной и безопасной работы оборудования; сохранности состояния устойчивой работоспособности; продление срока службы оборудования; увеличение производительности и степени использования оборудования во времени срок службы и производительность оборудования должны соответствовать расчетным. Ремонтные работы и обслуживание должны быть организованы так чтобы они обеспечивали квалифицированный уход за оборудованием в процессе эксплуатации а также систематический осмотр и...
21751. Системы и виды ремонта шахтного оборудования 25.5 KB
  Эта система представляет собой комплекс циклически повторяющихся технических и организационных мероприятий предусматривающих проведение запланированных профилактических работ по осмотру уходу и надзору с устранением встречающихся неисправностей а также ремонтов частично или полностью восстанавливающих работоспособность оборудования. Профилактические работы составляют сущность технического обслуживания оборудования и транспортных средств между ремонтами. Ремонт оборудования кроме стационарных установок должен сводиться к...
21752. Ремонтные нормативы и графики плановых осмотров и ремонта оборудования 22.5 KB
  Непосредственными ремонтными нормативами являются: длительность ремонтного цикла межремонтные периоды продолжительность простоя в ремонте структура ремонтного цикла. Длительность ремонтного цикла – это промежуток времени в часах между двумя плановокапитальными ремонтами. Структура ремонтного цикла – это определенная схема чередования видов ремонта на протяжении ремонтного цикла. Структура ремонтного цикла строится на основе группировки деталей и узлов по срокам их службы износостойкости.
21753. Организация производства. Основные понятия и определения 27 KB
  Организация производства – это комплекс мероприятий направленных на рациональное сочетание процессов труда с вещественными элементами производства средствами производства и расходными материалами производства в пространстве и времени с целью увеличения эффективности производственного процесса т. При определении организации производства следует разделять: Организацию предприятия как производственной системы на длительный срок. Особенности горного предприятия и анализ их влияния на организацию производства: Высокая...
21754. Классификация штата работающих на шахте 40.5 KB
  Рабочие трудящиеся занятые непосредственно на добыче угля на рабочих местах участков и цехов обслуживающих или создающих условия для протекания производственного процесса . Младший обслуживающий персонал трудящиеся занятые уборкой и отоплением помещений обслуживанием рабочих и руководящего персонала к ним относятся уборщицы дворники кубовщицы гардеробщицы рассыльные шоферы легковых машин и служебных автобусов. Ученики лица которые обучаются на предприятии под руководством рабочих и служащих рабочим профессиям или...
21755. Организация табельного учета 24.5 KB
  Табельный учет выполняет следующие функции: контроль за своевременной явкой рабочих и служащих на работу фиксирование опозданий и невыходов; проверку нахождения на местах работы работников учтенных в числе явившихся на работу; проверку правильности использования внутрисменных обеденных перерывов; контроль за своевременностью ухода работников с работы по окончании смены; контроль за временными уходами с работы по разрешению администрации а также учет работников находящихся в отпусках командировках выполняющих...