1) Абстрактний тип даних

Абстрактний тип охоплює 2 поняття - уявлення даних і операції. які можна над цими даними зробити. Приклади абстрактних типів в С ++ - масив, рядок, чергу. Фундаментальна ідея полягає в разделеніінесущественних деталей реалізації підпрограми і характеристик істотних для для коректного її використання. Такий поділ може бути виражено через спеціальний "інтерфейс": - безліч функцій, які можуть мати доступ до структур; - даних, за допомогою яких представлена ​​"абстракція".

Клас-це визначається пользователемтіп. Клас - це тип. а не об'єкт даних і кожен об'єкт классаімеет свою копію даних - членів класу.

Абстрактний клас-клас, для якого програміст НЕ МАЄ НАМІР СТВОРЮВАТИ ОБ'ЄКТИ. ПРИЗНАЧЕННЯ АБСТРАКТНОГО ТИПУ ДАНИХ - використання Єгови ЯКОСТІ БАЗОВОГОДЛЯ ПОДАЛЬШОГО УСПАДКУВАННЯ.

Клас робиться абстрактні ТАК: Одна або більше його функцій оголошуються ЧИСТО віртуальний: Т.Є. ТІЛО ФУНКЦІЇ ВИЗНАЧЕНО ЯК 0 (КАЖУТЬ, ЧТОІНІЦІАЛІЗАТОР = 0)

МОЖНА ОГОЛОШУВАТИ покажчики НА абстрактного класу.

Конкретний клас-об'єкти якого можна реалізувати.

Призначення поняття класу полягає в тому, щоб надати програмісту інструмент для створення нових типів. настільки ж зручних в обігу як і вбудовані типи. В ідеалі тип, визначений користувачем, способом використання не повинен відрізнятися від вбудованих типів, тільки способом створення. Тіпесть конкретне уявлення деякої концепції (поняття). Новий тип створюється для того, щоб дати спеціальне і конкретне визначення поняття, з яким ніщо прямо і очевидно серед вбудованих типів не відповідає. Добре вибрані типи, визначені користувачем, роблять програму більш чіткої і короткої. Це також дозволяє компілятору виявляти неприпустимі використання об'єктів. які в іншому випадку залишаться невиявленими до тестування програми. У визначенні нового типу основна ідея - відокремити несуттєві подробностіреалізаціі (наприклад, формат даних, які використовуються для зберігання об'єкта типу) від тих якостей, які істотні для його правильного використання (наприклад, повний список функцій, які мають доступ до даних). Такий поділ можна описати так, що робота зі структурою даних і внутрішніми адміністративними підпрограмами здійснюється через спеціальний інтерфейс (каналіруется).

Абстракція даних в класі - це коли клієнт классане знає реалізації цього класу. (Клієнт класу - це частина програми, яка користується цим класом).

Клас складається з даних-елементів та функцій-елементів. Дані елементи классаНЕ МОЖУТЬ ОТРИМУВАТИ ПОЧАТКОВІ ЗНАЧЕННЯ В ТІЛІ КЛАСУ, ДЕ вони оголошують (А ТІЛЬКИ ЗА ДОПОМОГОЮ КОНСТРУКТОРА)!

Доступ до об'єктів класу може обмежуватися набором функцій, які описані як частина цього класу. Такі функції називаються функціями членами або методами. Вони викликають У ВІДПОВІДЬ НА СООБЩЕНІЯПОСИЛАЕМИЕ ОБ'ЕКТУ.Об'екти классасоздаютсяіініціалізіруютсяфункціямі членами, спеціально для цієї мети описаними. Ці функції називаються конструкторами. Функція член може бути спеціальним чином описана для "очищення" кожного класового об'єкта при його знищенні. Така функція називається деструктором. Щоб використовувати клас. необхідно створити об'єкти цього класу. і таких об'єктів можна створювати стільки, скільки потрібно.

РЕАЛІЗАЦІЯ КЛАСУ - ЦЕ ЗАКРИТІ ЕЛЕМЕНТИ КЛАСУ + ОПІСАНІЕОТКРИТИХФУНКЦІЙ-ЕЛЕМЕНТІВ.

Реалізацію класу можна модіфіціроватьне впливаючи на її користувачів. ІМЕНА-іменники в опис системи ВІДПОВІДАЮТЬ ЗА НАЯВНІСТЬ КЛАСІВ.

ДОСТУП ДО ЕЛЕМЕНТІВ КЛАСУ:

ОПЕРАЦІЯ (.) Звертається до елементу по імені змінної або за посиланням на об'єкт.

ОПЕРАЦІЯ (->) Доступ через покажчик на об'єкт. (Імя_об'екта-> елемент еквівалентно (* імя_об'екта) .елемент).

int month, day, year;

void set (int, int, int);

Дані, оголошені послеpublic і до наступного ідентифікатора - доступні при будь-якому зверненні програми до об'єкта. Мітка public ділить тіло класу на дві частини. Імена в першій, закритої частини, можуть використовуватися тільки функціями членами. Друга, відкрита частина. становить інтерфейс до об'єкту класу.

Дані, оголошені послеprivate і до наступного ідентифікатора - доступниТОЛЬКО ФУНКЦІЙ-членам І ДРУЗІВ КЛАСУ. Це режим доступу до класу за умовчанням (Т.Є. ЯКЩО НІ ІНШИХ специфікаторами ДОСТУПУ) .Функціі члени: Читають закриті дані; Встановлюють значення закритих даних; реалізують можливості класу; Допоміжні

ОГОЛОШУЄТЬСЯ спеціальним чином (в тілі класу). Якщо функція-член описував ВНЕтела класу, то застосовується бінарна операція ДОЗВОЛУ ОБЛАСТІ ДІЇ (.) Вона прив'язує ім'я класу до імені елемента. Функції-члени мають областю действіяКЛАСС, НЕ-ЧЛЕНИ -Файл. Деякі операції повинні бути членами. конструктори, деструктори і віртуальні функції. Операція, що змінює стан об'єкта, має бути членом, а не другом. Якщо потрібно іметьнеявное перетворення для всіх операндів операції, то реалізує її функція повинна битьдругом, а не членом.

Можуть бути викликані тільки для спеціальної переменнойсоответствующего типу з використанням стандартного синтаксису для доступу до членів класу.

У функції члені на члени об'єкта. для якого вона була викликана, можна посилатися безпосередньо.

Конструктор. Функція конструює значення даного типу. вона називається конструктором. Конструктор розпізнається по тому, що має те ж ім'я, що і сам клас.

КОНСТРУКТОР НІЧОГО НЕ ВОЗВРАЩАЕТКонструктор викликається автоматично.

Коли клас має конструктор, всі об'єкти цього класу будуть инициализироваться. Якщо для конструктора потрібні параметри, вони повинні даватися: date today = date (23,6,1983)

Часто буває добре забезпечити кілька способів ініціалізації об'єкта класу. Такий підхід необхідний, якщо хочеться передбачити всі випадки використання класу. Це можна зробити, поставивши кілька конструкторів. Якщо конструктори істотно розрізняються за типами своїх параметрів, то компілятор при кожному використанні може вибрати правильний.

int month, day, year;

date (int, int, int); // день місяць рік

date (char *); // дата в строковому поданні

date (int); // день, місяць і рік сьогоднішні

date (); // дата за замовчуванням: сьогодні

>; Якщо у класу є конструктор, то він викликається завжди, коли створюється

Об'єкти можуть створюватися як:

[1] Автоматичний об'єкт. створюється кожен раз, коли його опис

зустрічається при виконанні програми, і знищується кожен раз

при виході з блоку, в якому воно з'явилося; Об'єкт також може

бути сконструйований за допомогою явної застосування

конструктора в вираженні, в цьому випадку він є автоматичним

[2] Статичний об'єкт. створюється один раз, при запуску програми, і

знищується один раз, при її завершенні;

[3] Об'єкт у вільній пам'яті. створюється за допомогою операції new і

знищується за допомогою операції delete;

[4] Об'єкт член. як об'єкт іншого класу або як елемент вектора.

Функції члени можуть бути перевантажені без явного використання ключового слова overload. Об'єкт класу без конструкторів можна форматувати шляхом привласнення йому іншого об'єкта цього класу. По суті, тут є конструктор за замовчуванням, визначений як побітова копія об'єкта того ж класу.

Деструкція необхідний щоб забезпечити відповідне очищення об'єктів цього типу. Ім'я деструктора для класу X є

X () ( "додаток конструктора")

Деструкторами НІЧОГО НЕ БЕРЕ І НІЧОГО НЕ ПОВЕРТАЄ. Перевантаження деструктора забороняється. Деструкція викликається автоматично.

Inline- функції. Функція член, описана (а не просто оголошена) в описі класу, вважається inline. Inline потрібен коли використовується багато маленьких функцій. По суті, скрізь, де в програмі традиційної структури стояло б просто якусь звичайне використання структури даних, дається функція. Це може страшно знизити ефективність, тому що вартість виклику функції (хоча і зовсім не висока в порівнянні з іншими мовами) все одно набагато вище, ніж пара посилань по пам'яті, необхідна для тіла функції .Функціі члени класу повинні заново компілюватиметься завжди, коли вноситься яке -або зміна в опис класу.

Друзі Функція не може бути членом двох класів. Функція не є членом, яка отримала право доступу до закритої частини класу. називається друга класу (friend). Функція стає одним класу після опису як friend. Функція друг не має ніяких особливостей. крім права доступу до закритої частини класу. Зокрема, friend функція не має покажчика this (якщо тільки вона не є повноправним членом функцією). Опис friend - справжнє опис. Воно вводить ім'я функції в самій зовнішньої області видимості програми і зіставляється з іншими описами цього імені. Опис одного може розташовуватися або в закритій, або у відкритій частині опису класу; де саме, значення не має. Функція член одного класу може бути другом іншого.

friend vector multiply (matrix, vector);

friend vector multiply (matrix, vector);

Схожі статті