
- •Оператор безумовного переходу
- •Ініціалізація масивів.
- •Символьні масиви. Рядковий тип.
- •Одновимірні масиви
- •Багатовимірні масиви
- •Функції
- •Рекурсія
- •Вказівний тип
- •Динамічний розподіл памяті
- •Структурний тип.
- •Об’єднуючий тип
- •Директиви препроцесора
- •Коментарії
- •Вказівник this
- •Перевантаження функцій
- •Перевантаження конструкторів
- •Стандартні значення параметрів функцій
- •Перевантаження унарних операторів
- •Перевантаження бінарних операторів
- •Дружні операторні функції
- •Наслідування
- •Захищене наслідування
- •Відкрите наслідування
- •Закрите наслідування
- •Множинне наслідування
- •Віртуальні функції
- •Чисто віртуальні функції
- •Абстрактні класи
- •Шаблони
- •Статичні елементи класу
- •Включення файлів
- •Потокова система вводу виводу
- •Маніпулятори введення-виведення
- •Поняття клас
- •Поняття об’єкт
- •Конструктори
- •Відкриті та закриті поля класу
- •Захищені поля класу
- •Дружні функції
- •Дружні класи
- •Масиви об’єктів
- •Ініціалізовані масиви об’єктів 44. Неініціалізовані масиви об’єктів
- •Вказівники на об’єкти
- •Посилання
- •Множини
- •Процедури
- •Функції
- •Рекурсивні функції
- •Оператор приєднання
- •Текстові файли
- •Модулі.
- •Вказівники.
- •Операції над вказівниками.
- •Списки.
- •Вставка елемента в список.
- •Видалення елемента із списку.
- •Динамічні рядки символів.
- •Пошук елемента списку
- •Поняття черги та стеку
- •Службові слова мови с
- •Типи даних
- •Змінні та константи
- •Оператори мови с
- •Ввід та вивід на консоль
- •Модифікатори
- •Мультиплікативні операції
- •Адитивні операції
- •Умовний оператор
- •Оператор вибору
- •Цикл з параметром
- •Цикл з передумовою
Захищені поля класу
Дружні функції
Дружні функції застосовуються для доступу до прихованих полів класу і є альтернативою методам. Метод, як правило, використовується для реалізації властивостей об'єкту, а у вигляді дружніх функцій оформляються дії, не представляючі властивості класу, але концептуально що входять в його інтерфейс і потребуючі в доступі до його прихованих полів, наприклад, перевизначення операції виведення об'єктів. Правила опису і особливості дружніх функцій:
1. Дружня функція оголошується всередині класу, до елементів якого їй потрібен доступ, з ключовим словом friend. Як параметр їй повинен передаватися об'єкт або посилання на об'єкт класу.
2. Дружня функція може бути звичайною функцією або методом другого раніше визначеного класу. На неї не розповсюджується дія специфікаторів доступу, місце розміщення її оголошення в класі байдуже.
Одна функція може бути дружньою відразу декільком класам.
Дружні класи
Якщо всі методи якого-небудь класу повинні мати доступ до прихованих полів іншого, весь клас оголошується дружнім за допомогою ключового слова friend. В наведеному прикладі клас mistress оголошується дружнім класу hero:
class hero{
friend class mistress;
}
class mistress{
void fl();
void f2();
}
Функції fl і f2 є дружніми по відношенню до класу hero (хоча і описані без ключового слова friend) і мають доступ до всіх його полів. Оголошення friend не є специфікатором доступу і не успадковується.
Масиви об’єктів
В мові C++ масиви можуть складатися з об'єктів. З синтаксичної очки зору оголошення масиву об'єктів нічим не відрізняється від оголошення масиву вбудованого типу. Якщо в класі визначений конструктор з параметрами, кожний об'єкт в масиві ініціалізувався за допомогою списку ініціалізації, як це прийнято для масивів будь-якого типу. Проте точний вид списку ініціалізації залежить від кількості параметров конструктора.
Якщо конструктор має лише один параметр, можна просто задати список початкових значень, використовуючи звичайні синтаксичні конструкції, призначені для ініціалізації масивів. В міру створення елементів масиву ці значення по черзі присвоюються параметру конструктора.
Ініціалізовані масиви об’єктів 44. Неініціалізовані масиви об’єктів
Особлива ситуація виникає, коли необхідно створити масиви об'єктів, які ініціалізували. Розглянемо наступний клас.
class cl {
int і;
public:
cl(int j) { i=j;} // Конструктор
int get_i() { return і;}
};
Тут в класі cl визначений конструктор з одним параметром. Це значить, що будь-який масив такого типу повинен ініціалізуватися.
Таким чином, масив не можна оголосити звичайним чином
cl а[9]; // Помилка, конструктору необхідний список ініціалізації
Цей оператор не працює, оскільки передбачається, що клас cl не має параметрів, оскільки в оголошенні масиву не вказаний список ініціалізації. Проте клас cl не містить конструкторів, які не мають параметрів. Отже, оскільки даному оголошенню не відповідає жоден конструктор, компілятор видасть повідомлення про помилку. Щоб вирішити цю проблему, необхідно перенавантажувати конструктор, додавши варіант, який не має параметрів. Тепер в програмі можна оголосити обидва види масиву.
class cl {
int і; public:
cl() { і=0; } // Викликається для неініціалізованих масивів
cl(int j) { i=j;}// Викликається для масивів які інціалізуються
int get_i
{ return і;}
};
В такому варіанті програми допускаються наступні оператори.
cl al[3]= {3, 5, 6}; // Масив який ініціалізується
cl а2[34]; // Неініціалізований масив
Особлива ситуація виникає, коли необхідно створити масиви об'єктів, які
неініціалізували.