Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ob_yektno-oriyentovani_metodi_programuvannya.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
2.21 Mб
Скачать

Форматування.

Безпосереднє застосування операцій введення <<і виведення>> до стандартним потокам cout, cin, cerr, clog для даних базових типів привадит до використання "замовчуваних" форматів зовнішнього представлення пересилаються значень.

Крім прапорів форматування використовуються наступні protected компонентні дані класу ios:

int x_width - мінімальна ширина поля виводу.

int x_precision - точність подання дійсних чисел (колікість цифр дробової частини) при виведенні;

int x_fill - символ-заповнювач при виведенні, пробіл - за умовчанням.

13. Форматований ввід-вивід в С++ з використанням маніпуляторів.

-

class name

{    int data; // Елемент данних    void show (int); // Функция-елемент };

         cin відповідає стандартному вводу (тобто для вводу об’єктів стандартних типів), зв’язаний з клавіатурою;

-         cout відповідає стандартному виводу (тобто для виводу об’єктів стандартних типів), зв’язаний з дисплеєм;

-         cerr відповідає стандартному виводу для повідомлень про помилки, зв’язаний з дисплеєм;

-         cprn відповідає стандартному виводу (тобто для виводу об’єктів стандартних типів), зв’язаний з принтером;

Вивід здійснюється за допомогою оператора << , ввід – з допомогою оператора >>.

Для керування станом потоків використовуються так звані маніпулятори потоків. Їх визначення містить файл <iomanip>, який необхідно підключити командою#include. Якщо деякий маніпулятор з'являється в потоці, то він змінює стан потоку до тих пір, поки в потік не буде відправлений інший маніпулятор.

Наприклад, за замовчуванням, значення цілих типів читаються та записуються у десятковому форматі. Маніпулятори hexoctdec змінюють формат відповідно на 16-ковий, 8-ковий, 10-ковий. Маніпулятори  showbasenoshowbase встановлюють та відміняють виведення перед числом початкових символів 0 або 0x для позначення основи системи числення. Маніпулятори uppercasenouppercase визначають вигляд 16-кових цифр. При введенні та виведенні дійсних значень за замовчуванням діє маніпулятор fixed (формат з фіксованою десятковою крапкою). Маніпулятор scientific змінює цей формат на формат з рухомою десятковою крапкою. Маніпулятор setprecision (n) або функція-член precision (n) визначають точність n знаків (за замовчуванням точність 6).

14. Класи С++. Специфікатори доступу. Оператори розкриття області видимості.

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

Клас можна визначити за допомогою конструкції

Тип_класу им’я_класу {компоненти класу};

  • тип класу – одно з службових слів class, struct, union;

  • ім’я_класу – ідентифікатор (задається користувачем);

  • компоненти класу – визначення і об’явлення даних, що належать класу функцій.

Функція, що є компонентом класу, називається методом класу або функцією-членом. Дозволяється визначати клас:

  • з полями і методами

  • тільки з полями

  • тільки з методами

  • без полів і без методів.

Клас без полів і без методів називається порожнім класом. Елементи класу типу struct за умовчанням відкриті і доступні для інших частин програми. Члени класу class за умовчанням закриті і недоступні поза даним класом. Доступ до вмісту класу задається специфікаторами доступу, які позначаються public: і private:

public: - об’явлення елемента класу, до якого мають доступ поза класом;

private: - закриває доступ до елементу класу зовні.

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

protected - Захищений розділ

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

15. Оператори динамічного виділення і звільнення пам’яті в мові С++.

Мова C++ містить два оператори – new і delete, які виконують функції з виділення та звільнення пам'яті. Їх загальний формат має такий вигляд:

змінна-покажчик = new тип_змінної;

delete змінна-покажчик;

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

на цю область пам'яті. За допомогою оператора new можна виділити пам'ять для значень будь-якого допустимого типу.

Оператор new дає змогу динамічно виділити область пам'яті. Оператор delete звільняє область пам'яті, яка адресується заданим покажчиком. Після звільнення ця пам'ять може бути знову виділена для інших потреб під час подальшого new-запиту на виділення області пам'яті. Оператор delete звільняє раніше виділену динамічну пам'ять.

Демонстрація механізму динамічного розподілу

пам'яті

#include <iostream> // Потокове введення-виведення

using namespace std; // Використання стандартного простору імен

int main()

{

int *p;

p = new int; // Виділяємо пам'ять для int-значення.

*p = 20; // Поміщаємо в цю область пам'яті значення 20.

cout << *p; // Переконуємося (шляхом виведення на екран) в роботоздатності цього коду програми.

delete p; // Звільняємо пам'ять.

getch(); return 0;

}

16. Простори імен в С++. Директива using.

Простори імен (namespaces) призначені для локалізації імен ідентифікаторів, і попередження їх конфліктів. 

Щоб створити простір імен використовують ключове слово namespace. Код:

namespace space_name

{

// Оголошення

}

Щоб отримати доступ до об'єктів з простору іменн з за його меж використовують оператор дозволу області видимості ( :: ).

namespace some

{

int something;

}

something=1; // Помилка, something невидиме.

some::something=1; // Ми вказали в якій області його шукати.

using namespace name;

using name::member;

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

17. Створення операторної функції-члена в С++.

Операторна функція-член має наступний вигляд:  тип ім’я_класу: :operator# { список-аргументів) { ... // Операції  }

Зазвичай операторна функція повертає об'єкт класу, з яким вона працює проте тип значення, що повертається, може бути будь-яким. Символ # замінюється необхідним оператором. Наприклад, якщо в класі перевантажується оператор ділення «/» операторна функція-член називається operator/.

18. Перезавантаження операторів з використанням дружніх функцій в С++.

Перевантаження оператора полягає в зміні сенсу оператора (наприклад, оператора плюс (+), який звичайно в C++ використовується для додавання) при використанні його з певним класом.

19. Успадкування і захищені члени в С++.

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

Коли клас успадковує характеристики декількох класів – це називаэться множинне успадкування. C++ повністю підтримує множинне успадкування. Відразу необхідно освоїти наступні основні концепції:

  • При множинному успадкуванні похідний клас одержує атрибути двох або більш класів.

  • При використовуванні множинного успадкування для породження класу конструктор похідного класу повинен викликати конструктори всіх базових класів.

  • При породженні класу з похідного класу утворюється ієрархія успадкування (ієрархія класів).

Множинне успадкування є могутнім інструментом об'єктно-орієнтованого програмування.

В базових класах крім елементів, оголошених як public та private (загальні, приватні) зустрічаються елементи, оголошені як protected (захищені).

Як ви знаєте, похідний клас може звертатися до загальних елементів (public) базового класу, наче вони визначені в похідному класі. Але і поза методами похідного класу до загальних елементів можна звертатися напряму. З другого боку, хоч до приватних елементів (prvate) базового класу і неможна звертатися поза методами класу, але і в самому похідному класі не може звертатися напряму – для звернення до таких елементів похідний клас повинен використовувати інтерфейсні функції. Захищені елементи (protected) базового класу займають проміжне положення між приватними і загальних. Якщо елемент є захищеним, то

  • По-перше, у методах похідного класу можна звертатися до нього, наче він є загальним, або описаний всередині класу-спадкоємця.

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

20. Дружні функції і класи в С++.

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

 

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

 

Одна з причин їх використання полягає втому, що деякі функції потребують привілейованого доступу більш, чим до одного класу. Друга причина - friend-функція передає всі параметри через список параметрів, і значення кожного з них підлегло перетворенню, сумісному з призначенням. Такі перетворення застосовуються до явно переданих аргументів-класів і тому особливо корисні у випадках перевантаження оператора.  Оголошення friend функції повинне з'являтися усередині оголошення класу, якому вона дружня. Імені функції передує ключове слово friend, і її оголошення може знаходиться як в public так і в private частини класу, що не вплине на значення. Функція-член одного класу може бути friend-функцією іншого класу. Це відбувається тоді, коли функція-член оголошена в friend класі з використанням оператора дозволу контексту для визначення імені функції дружнього класу. Якщо всі функції-члени одного класу є friend-функціями іншого класу, то це можна визначити записом:

 

friend class ім'я класу

class t1

{

friend void а(); // friend-функція

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]