виході об'єкта з області видимості. p> Локальні об'єкти видаляються тоді, коли вони виходять з області видимості. Глобальні об'єкти видаляються при завершенні програми.
5. Спадкування
Стосовно до C + + спадкування - це механізм, за допомогою якого один клас може успадковувати властивості іншого. Спадкування дозволяє будувати ієрархію класів, переходячи від більш загальних до більш спеціальним.
Клас, властивості і поведінка якого успадковуються, називається базовим класом.
Клас, який успадковує називає, називається похідним класом.
Зазвичай процес спадкування починається з завдання базового класу. Базовий клас визначає всі ті якості, які будуть спільними для всіх похідних від нього класів. У сутності, базовий клас є найбільш загальний опис ряду характерних рис. Похідний клас успадковує ці загальні риси і додає властивості, характерні тільки для нього.
Спадкування, при якому вказується один базовий клас, називається простим.
Якщо вказуються декілька класів, то успадкування називається множинним.
Оголошення виглядає наступним чином:
class ім'я класу: public ім'я базового класу
Наприклад, class D: public A
{...}
Після імені класу D мається двокрапка, за якою слід ключове слово public і ім'я класу A. Для компілятора це вказівка ​​на те, що клас D буде успадковувати всі компоненти класу A. Само ключове слово public інформує компілятор про те, що, оскільки клас A буде успадковуватися, значить, всі відкриті елементи базового класу будуть також відкритими елементами похідного класу. Однак всі закриті елементи базового класу залишаться закритими і до них не буде прямого доступу з похідного класу. Причина, по якій закриті члени класу стають недоступними для похідних класів - підтримка інкапсуляції. Якби закриті члени класу ставали відкритими просто за допомогою спадкоємства цього класу, інкапсуляція була б абсолютно неспроможна.
При множині спадкуванні оголошення виглядає так:
class D: public A [, public C]
{тіло класу D}
Розглянемо приклад:
enum Bool
{false, true};// Константи зводяться до int. Вони змінюються з кроком рівним одиниці. p> class Point: public Location
{protected:
Bool vis;
public:
Point (int _x, int _y);
void Show ();
void Hide ();
};
Point :: Point (int_x, int_y): Location (_x, _y)
{vis = false;}
Тут клас Point успадковує властивості базового класу Location.
Спадкування і контроль доступу
Специфікатор доступу визначає те, як елементи базового класу успадковуються похідним класом. Якщо специфікатором доступу успадкованого базового класу є ключове слово public, то всі відкриті члени базового класу залишаються відкритими і у похідному. Якщо специфікатором доступу успадкованого базового класу є ключове слово private, то всі відкриті члени базового в похідному класі стають закритими. В обох випадках всі закриті члени базового класу в похідному класі залишаються закритими і недоступними.
Важливо розуміти, що якщо специфікатором доступу є ключове слово private, то хоча відкриті члени базового класу стають закритими у похідному, вони залишаються доступними для функцій - членів похідного класу.
Доступ до полів базового класу в похідному класі може бути збережений або посилений, але ніколи не може бути полегшений. Щоб наочніше уявити собі цей принцип, звернемося до таблиці:
Доступ
спадкування
Доступ компонентів
в базовому класі
Доступність компонентів
базового класу в
похідному класі
public
private
protected
public
Немає доступу
protected
public
protected
private
protected
public
Немає доступу
protected
protected
private
private
protected
public
Немає доступу
private
private
В
6. Покажчик this
Коли функція, що належить класу, викликається для обробки даних конкретного об'єкта, цієї функції автоматично і неявно передається покажчик на той об'єкт, для якого функція викликана. Цей покажчик має фіксоване ім'я this і непомітно для програміста ("Таємно") визначено у кожної функції класу наступним чином:
імя_класса * const this = адресу оброблюваного об'єкта;
Ім'я this є службовим (ключовим) слово...