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;

}


 

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

29054. Патентное право: понятие, объекты патентного права и условия их патентоспособности 64.5 KB
  На результат интеллектуальной деятельности признанный патентоспособным выдается патент официальный документ удостоверяющий приоритет авторство на изобретение полезную модель или промышленный образец а также исключительное право его обладателя на изобретение полезную модель или промышленный образец. Полезная модель. Полезная модель признается соответствующей условиям патентоспособности если является новой и промышленно применимой. Полезная модель признается новой если совокупность ее существенных признаков не известна из уровня...
29055. Наследование по завещанию 53 KB
  Наследодатель вправе сделать распоряжение своим имуществом на случай смерти путем составления завещания. Условия к совершению завещания: совершается полностью дееспособным гражданином; должно быть совершено лично наследодателем; в завещании должно содержаться распоряжение только одного лица. Принципы наследования по завещанию: Свобода завещания наследодатель по своему усмотрению выбирает наследников и завещает все или часть своего имущества; также он вправе лишить наследства одного или нескольких наследников без объяснения причин в любое...
29056. Наследование по закону 32.5 KB
  Наследники: первой очереди дети супруг и родители наследодателя. Внуки наследодателя наследуют по праву представления также как и потомки всех последующих очередей; второй очереди полнородные и неполнородные братья и сестры наследодателя его дедушки и бабушки; третьей очереди полнородные и неполнородные братья и сестры родителей наследодателя дяди и тети наследодателя; четвертой очереди прадедушки и прабабушки наследодателя; пятой очереди дети родных племянников и племянниц наследодателя двоюродные внуки и внучки и родные...
29057. Гражданское право как отрасль российского права: его основные источники и начала 44.5 KB
  Характеризуется самостоятельным предметом и методом В предмет гражданского права включаются: Имущественные отношения отношения возникающие по поводу приобретения использования и отчуждения имущества. Предметом таких отношений являются материальные блага: вещи деньги ценные бумаги имущественные права работы и услуги информация. Принципы гражданского права это основополагающие начала на которые опирается право и которые в силу закрепления их в законодательстве имеют обязательный характер.
29058. Гражданские правоотношения: понятие, виды гражданских правоотношений. Субъекты и объекты гражданских правоотношений. Основания их возникновения 89.5 KB
  Иначе говоря специфические черты и признаки гражданских правоотношений предопределены особенностями самого гражданского права. Содержание гражданского правоотношения Содержание гражданского правоотношения составляют субъективные права и обязанности его участников. Юридические возможности как составные части содержания субъективного гражданского права называются правомочиями. При весьма большом разнообразии содержания субъективных гражданских прав можно обнаружить что оно является результатом разновариантных комбинаций трех правомочий: 1...
29059. Правосубъектность гражданина 49.5 KB
  Гражданская дееспособность определяется как способность гражданина своими действиями приобретать и осуществлять гражданские права создавать для себя гражданские обязанности и исполнять их ст. 21 ГК РФ можно определить содержание дееспособности которое понимается как предоставленная гражданину возможность реализации своей правоспособности собственными действиями и включает способность гражданина своими действиями: приобретать гражданские права; осуществлять гражданские права; создавать и исполнять гражданские обязанности; нести...
29060. Юридические лица: понятие, виды, создание и прекращение юридических лиц 77 KB
  Понятие юридического лица в ст. Законодатель убрал уточнение по имущественной обособленности на праве собственности праве хозяйственного ведения или оперативного управления Суть от этого особо не изменилась поскольку в обоих определениях указываются одни и те же признаки юридического лица. В данном определении указываются признаки юридического лица это такие внутренние присущие ему свойства каждое из которых необходимо а все вместе достаточны для того чтобы организация могла признаваться субъектом гражданского права. Правовая...
29061. Объекты гражданских прав 169.5 KB
  К объектам гражданских прав закон относит вещи включая деньги и ценные бумаги иное имущество в том числе имущественные права; работы и услуги; результаты интеллектуальной деятельности в том числе исключительные права на них интеллектуальная собственность; нематериальные блага ст. Таким образомобъекты гражданских прав подразделяются на материальные и нематериальные идеальные. К первой группе относят: вещи; работы и услуги а также их результаты имеющие овеществленный либо иной стоимостной эффект например ремонтные работы услуги по...
29062. Понятие и виды сделок. Требования, предъявляемые к форме сделок 245.5 KB
  Но поскольку субъектами сделок являются граждане и юридические лица муниципальные образования субъекты РФ государство иностранные граждане и иностранные юридические лица лица без гражданства а субъективные гражданские права и обязанности являются содержанием гражданского правоотношения то понятие сделки можно определить следующим образом: Сделка – это осознанное волевое и юридически значимое действие субъектов гражданского права прямо направленное на возникновение изменение и прекращении гражданских правоотношний. С помощью сделки...