Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ппвис 2 часть с++.doc
Скачиваний:
26
Добавлен:
01.03.2016
Размер:
265.22 Кб
Скачать

16. Деструкторы. Назначение, описание, использование.

Деструктор – специальный метод класса, используемый для разрушения объектов класса. Имя деструктора совпадает с именем конструктора, которому предшествует символ тильда ~. Он всегда имеет открытый спецификатор доступа и не имеет типа, ни параметров. Деструктор управляет уничтожением объекта из оперативной памяти. Вызывается деструктор автоматически при разрушении объекта. Если объект создается динамически через указатель при помощи оператора new, то для уничтожения такого объекта следует использовать оператор delete для указателя.

Типовым использованием деструктора является освобождение динамической памяти, которая ранее была выделена конструктором. В отличие от конструктора, деструктор не перегружается и может быть в классе только один. Лучше всегда определять деструктор класса, даже если он не производит никаких действий и имеет пустое тело.

Объявление: public: ~имя_класса ();

Пример: ~CBook();

17. Пример описания конструктора копирования для класса со структурными членами-данными (массива).

#include <iostream.h>

#include <string.h>

class Strukture {

private: struct Book{

char m_name[15];

char m_autor[10];

int m_page;

int m_kol;

} x;

public: Strukture (Strukture &obj)

{

strcpy(x.m_name, obj.x.m_name);

strcpy(x.m_autor, obj.x.m_autor);

x.m_page=obj.x.m_page;

x.m_kol=obj.x.m_kol;

}

};

18. Пример описания конструктора копирования для класса с динамическими членами-данными (динамической строки).

#include <stdio.h>

#include <string.h>

class String {

private: char *s;

int kol;

public String(String &obj)

{

s=new char (obj.kol);

if (!s)

cout<<"ERROR";

strcpy(s, obj.s);

kol=obj.kol;

}

};

19. Пример описания класса для хранения и обработки массива целых значений.

#include <iostream.h>

class Massiv

{

private: int mas[10];

public: Massiv()

{

for (int i=0; i<10; i++)

mas[i]=0;

}

Massiv (int x)

{

for (int i=0; i<10; i++)

mas[i]=x;

}

Massiv (int *x1)

{

for (int i=0; i<10; i++)

mas[i]=x1[i];

}

Massiv (Massiv &obj)

{

for (int i=0; i<10; i++)

mas[i]=obj.mas[i];

}

TO_SHOW()

{

for (int i=0; i<10; i++)

cout<<mas[i]<<'\t';

cout<<endl;

}};

21. Пример описания класса для хранения и обработки строки.

#include <iostream.h>

#include <string.h>

class Stringg

{

private: char str[30];

public: Stringg()

{

str[0]='\0';

}

Stringg (char *s)

{

strcpy(str,s);

if(str[29]!='\0')

str[29]='\0';

}

Stringg (Stringg &obj)

{

strcpy(str,obj.str);

}

TO_SHOW()

{

cout<<str<<endl<<endl;

}

};

22. Пример описания класса для хранения и обработки динамической строки.

#include <iostream.h>

#include <string.h>

class Stringg

{

private: char *str;

int kol;

public: Stringg()

{

str=new char;

*str='\0';

}

Stringg (char *s)

{

kol=strlen(s);

str=new char (kol);

if (!str)

cout<<"ERROR";

strcpy(str,s);

}

Stringg (Stringg &obj)

{

kol=obj.kol;

str=new char (kol);

if (!str)

cout<<"ERROR";

strcpy(str,obj.str);

}

TO_SHOW()

{cout<<str<<endl<<endl;}};

23. Функции-друзья. Назначение, описание, использование.

Для того, чтобы использовать члены класса из вне существует несколько способов:

- вызвать метод через объект (член) класса

- унаследовать класс другим классов

-создать функцию “друг”

Особенности: по правилам описания, по способу вызова, по характеру использования - обычная функция, но в ее прототипе должно быть ключевое слово friend, он должен располагаться в классе чьим другом является функция. Функция может быть другом нескольких классов, прототип нужно указывать в каждом классе. Как правило в списке аргументов указывается объекты дружественных классов. Функция-друг имеет такой же доступ, как метод соответствующего класса. Преимущества данного способа доступа:

  1. Можем получить доступ к закрытым членам, практически не изменяя класс.

  2. Возможность изменения функциональности класса (можно использовать в роли метода).

  3. Функция-друг полезна при работе с несколькими закрытыми членами нескольких классов.

Поскольку объекты передаются явно, т.е. через параметры – функция друг используется для перегрузки операторов. В тех случая, когда 1-ым операндом перегружаемого оператора – не объект, то это единственный способ перегрузки операторов.