- •2.Операторы new, delete.
- •4. Перегрузка функций.
- •5. Ссылки. Назначение и особенности использования.
- •10. Классы и объекты. Члены классов. Атрибуты доступа.
- •11. Описание классов. Видимость и доступ к членам классов.
- •12. Функции-члены классов. Описание, вызов.
- •13. Инициализация объектов классов. Назначение, типы конструкторов.
- •14. Инициализация объектов классов. Описание конструкторов.
- •15. Особенности описания и использования конструкторов копирования.
- •16. Деструкторы. Назначение, описание, использование.
- •17. Пример описания конструктора копирования для класса со структурными членами-данными (массива).
- •24. Пример использования функции-друга.
- •25. Перегрузка операторов. Назначение, правила, способы.
- •26. Перегрузка операторов с использованием операторных-функций. Указатель this.
- •27. Перегрузка операторов с использованием дружественных функций.
- •28. Поразрядное копирование. Особенности перегрузки оператора присваивания.
- •29. Перегрузка операторов отношений. Примеры.
- •30. Перегрузка логических операторов. Примеры.
- •31. Перегрузка арифметических операторов. Примеры.
- •33. Перегрузка оператора ”[ ]” для класса со структурными членами-данными (массива).
- •37. Наследование. Конструкторы и деструкторы.
- •38. Наследование. Видимость и доступ к членам базовых и производных классов.
- •39. Статический (перегрузка операторов, функций, функций-членов, конструкторов) полиморфизм.
- •40. Пример описания класса на базе одиночного наследования.
- •41. Функции-шаблоны. Назначение, описание, использование.
- •42. Пример описания и вызова функции-шаблон для суммирования элементов массива.
- •45. Характеристика пространства имен.
- •46. Описание и использование пространства имен (на примере).
- •47. Понятие исключительная ситуация и способы обработки исключений.
- •50. 51.Синтаксис и использование команды try, catch. Варианты использования catch. Генерация исключений командой throw.
- •52. Варианты генерации и обработки исключений.
- •Istream iostrim ostream
- •Ifstream fstream ofstream
- •64. Пример создания и заполнения файла.
- •65. Пример открытия и чтения содержимого файла.
- •66. Пример заполнения файла записями (значение-значение, размещенными в полях 20 и 30 позиций, с прижатием соответственно влево и вправо).
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-ым операндом перегружаемого оператора – не объект, то это единственный способ перегрузки операторов.