Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Деструктори




Деструктор – це спеціальна функція, яка автоматично викликається перед знищенням об’єкта.

Деструктор можна розглядати як протилежність конструктору. Зазвичай він використовується для вивільнення пам’яті, виділеної класу, чи виконує інші задачі по наведенню порядку після роботи класу. Клас не може мати більше одного деструктора. Наявність деструктора не є обов’язковою. Деструктор не повертає ніякого значення й не приймає аргументів. Його ім’я співпадає з ім’ям класу з додаванням символу тильда (~) попереду.

Як говорилося, деструктор викликається безпосередньо перед руйнуванням класу. Клас може бути зруйнований при виході з області видимості (у випадку розміщення у стеку), чи в результаті застосування оператора delete (у випадку динамічного розміщення). В будь-якому випадку, виклик деструктора буде останньою дією перед остаточним зникненням класу.

Змінемо код для класу Rect:

class Rect

{

public:

Rect();

Rect (int _left, int _top, int _bottom, int _right);

~Rect(); // доданий деструктор

int GetWidth();

int GetHeigth();

void SetRect (int _left, int _top, int _bottom, int _right);

private:

int left;

int top;

int bottom;

int right;

char* text; // доданий новий член класу };

Rect::Rect(): Left(0), Top(0), Bottom(0), Right(0)

{

text=new char[256];

strcpy(text, “Hello!”);

}

// проміжний код програми опущено

Rect::~Rect()

{

Delete[] text;

}

4. Члени-дані

Члени-дані класу – це просто змінні, оголошені в опису класу. Їхньою областю видимості за замовчуванням є клас. У порівнянні з членами-даними структур, ви можете управляти доступом до членів-даних класу, оголошуючи їх як private, public чи protected. Незалежно від встановленого рівня доступу, члени-дані класу можуть використовуватись усіма функціями цього класу. Рівень доступу визначає видимість членів-даних поза класом. Наприклад, до закритих чи захищених членів-даних доступ ззовні неможливий. Звернення до відкритих членів-даних можливий лише через клас.

Розглянемо клас Rect. В ньому відсутні відкриті члени-дані. При спробі звернення до змінних цього класу ви отримаєте повідомлення про помилку:

Rect rect(10, 10, 200, 200);

int x=rect.left; // помилка компіляції

Змінна left є закритим членом класу й ви не можете звертатися до неї з програми. Якщо оголосити left в розділі public, то компіляція пройде успішно.

Для роботи з закритими членами-даними ви можете написати спеціальні функції. Одна функція буде повертати значення певного члена класу, а інша – змінювати його значення. Це будуть відкриті функції, що працюють із закритими членами-даними.

Проілюструємо це прикладом:

int Rect::GetLeft(); { return left; }

void Rect::SetLeft(int newLeft) { left =newLeft; }

//Тепер для отримання значення члена ви маєте дати команди:

Rect rect;

int x=rect.GetLeft();

5. Функції-члени

Функції-члени класу – це функції, що належать вашому класу. Вони є локальними по відношенню до класу, в якому визначені, й не існують поза класом. Функції-члени можуть бути викликані лише зсередини класу чи через екземпляр класу. Вони мають доступ до всіх відкритих, захищених та закритих членів-даних свого класу. Функції-члени можуть бути оголошені в розділах private, public чи protected.

Відкриті функції-члени являють собою інтерфейс між користувачем й класом. Саме через відкриті функції користувач класу отримує доступ до тих можливостей, які надає клас.

Наприклад, у вас є клас для запису та відтворення звуку. В цьому класі відкритими можуть бути функції типу Open(), Play(), Record(), Save() й т.д.

Закриті функції-члени призначені лише для використання самим класом. Вони скриті від зовнішнього світу.

Захищені функції-члени – це функції, доступні тільки для тих класів, які є похідними даного класу. Доступ ззовні до цих функцій неможливий.

6. Класи в C++ Builder

 

C++ Builder сам виконує значну кількість роботи з генерації програмного коду. C++ Builder вже має готову бібліотеку класів (бібліотеку візуальних компонентів VCL), які підтримують форму та різноманітні її компоненти.

Наприклад, клас TForm підтримує мінімальну форму в додатку C++ Builder. Коли ви створюєте новий проект, C++ Builder автоматично оголошує для підтримки головної форми проекту клас TForm1, як похідний від класу TForm.

Розглянемо фрагмент коду певного проекту, згенерований C++ Builder у відповідь на дії користувача:

class TForm1: public TForm

{

__published: // IDE-managed Components

TButton *Button1;

TEdit *Edit1;

TBevel *Bevel1;

TBitBtn *BitBtn1;

TLabel *Item1;

TLabel *Item2;

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall BitBtn1Click(TObject *Sender);

void __fastcall Edit1KeyPress(TObject *Sender, char &Key);

void __fastcall Edit2KeyPress(TObject *Sender, char &Key);

void __fastcall Edit1Exit(TObject *Sender);

void __fastcall Edit1Enter(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

Як ви бачите, форма – це приклад класу. Вона має базовий клас (TForm), певну кількість полів (6) та функцій обробки подій (7).

Зверніть увагу на розділ __published в класі TForm1. Ключове слово __published не є частиною стандартного С++, а додане розробниками Borland С++ Builder. Розділ __publishedвикористовується середовищем С++ Builder при взаємодії з компонентами. Ви не повинні вносити ніяких змін в цей розділ.

 

Контрольні питання

1. Дати визначення конструктора класу.

2. Навести приклад оголошення конструктора.

3. Відмінність конструктора за замовчуванням від конструктора з параметрами.

4. Дати визначення деструктора.

5. Навести приклад використання деструктора.

6. Дати визначення членів-даних класу.

7. Дати визначення функцій-членів класу.

 

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.