- •Вирази і оператори.
- •Логічні оператори.
- •Оператор розгалуження.
- •Оператор вибору.
- •Арифметичні операції. Пріоритет виконання.
- •Вказівники константи.
- •Вказівники змінні.
- •Функції.
- •Функція для роботи з файлами.
- •Передача аргументів у функцію.
- •Значення, яке повертає функція.
- •Рекурсивні функції.
- •Блоки і область видимості змінних.
- •Оператори повторення.
- •Структури. Вкладені структури.
- •Створення класів.
- •Управління виконанням програм.
- •Одновимірні масиви даних.
- •Двовимірні масиви даних.
- •Створення масивів з використанням вказівників.
- •Алгоритми сортування масивів.
- •Рядки і операції над ними.
- •Функції введення-виведення.
- •Конструктори, деструктори.
- •Класи. Успадкування.
- •Класи. Поліморфізм.
- •Класи. Інкапсуляція.
- •Вказівник this.
- •Перевантаження операцій та операторів.
- •Поліморфізм і віртуальні функції.
- •Стандартний клас string.
- •Стандартний клас queue.
- •Стандартний клас vector.
- •Стандартний клас list.
- •Стандартний клас stack.
- •Створення і використання шаблонів функцій та класів.
- •Стандартна бібліотека шаблонів (stl)
- •Доступність методів класу.
- •Конструктор та деструктор класів.
- •Наслідування класів.
- •Використання просторів імен.
- •Шаблони функцій.
- •Шаблони класів.
- •Алгоритми стандартної бібліотеки stl.
- •Динамічні структури типу стек.
- •Динамічні структури типу однонаправлений список.
- •Динамічні структури типу двонаправлений список.
- •Сортування масивів із використанням вказівників.
Шаблони функцій.
Припустимо, що потрібно написати функцію, яка буде обраховувати модуль числа. Скоріше за все, функція, яка обраховує модуль буде використовуватись з якимось одним типом даних.
int abs ( int n) // обрахунок модулів цілих чисел
{
return (n>0) ? –n : n; // якщо негативне, повернути –n
}
Визначена вище функція бере аргумент типу int і повертає результат того ж типу. Але якщо уявити зараз, що знадобилось знайти модуль типу long. Потрібно писати таку ж функцію. Тіло функції нічим не буде відрізнятись. Та все ж таки, вони зовсім різні, оскільки обробляють аргументи і повертають значення різних типів. Вони можуть бути перевантаженими і мати різні імена. Але для кожного з них потрібно писати окреме визначення.
Багаторазове переписування таких функцій-близнят стомлює. Саме шаблони даних призначені для того, щоб писати функцію один раз і змусити її працювати з різними типами даних. Шаблон працює з усіма базовими числовими типами даних. В програмі спочатку визначається шаблонна версія abs(), а потім в main() відбувається перевірка правильності її роботи. Типи визначаються функцією при передачі аргумента.
Ось специфікація функції abs() для роботи з декількома типами даних:
template <class T> // шаблон функції
T abs(T n)
{
return (n>0) ? n : n; }
Вся конструкція починаючи з ключового слова template і включаючи визначення функції, називається шаблоном функції. Ключове слово template повідомляє компілятору, що ми визначаємо шаблон функції. Змінна Т називається аргументом класу. Всередині всього визначення шаблона будь-який конкретний тип даних, такий як int, заміняє аргумент Т.
Шаблони класів.
Шаблонний принцип можна поширити на класи. В цьому випадку шаблони зазвичай використовуються, коли клас є сховищем даних. Стеки і зв’язні списки також типові приклади класів – сховищ даних. До цих пір всі приклади сховищ могли містити дані одного базового тип, наприклад могли зберігатись дані типу int . Якби захотілось зберігати дані типу long, довелося б писати абсолютно нове визначення класу. Подібним же образом нам довелося б створювати класи для зберігання даних кожного типу, якби не шаблони класів. З їх допомогою можна написати таку специфікацію класу, яка зберігає все, що запросять. Ідея шаблонних класів багато в чому сходиться з ідеєю шаблонних функцій.
template <class Type>
class Stack
{ // дані і методи використовують шаблонний аргумент Type }
Тут Stack є шаблонним класом. Ключові слова template і class Stack говорять про те, що весь клас буде шаблонним.
Шаблонний аргумент Type використовується замість фіксованого типу в усіх місцях специфікації класу, де є посилання на тип масиву st.
Шаблони класу відрізняються від шаблонів функцій способом реалізації. Для створення шаблонної функції ми викликаємо її з аргументами потрібного типу. Класи ж реалізуються з допомогою визначення об’єкта, який використовує шаблонний аргумент.
Алгоритми стандартної бібліотеки stl.
Алгоритм – це функція, яка виконує деякі дії над елементами контейнера (контейнерів). Алгоритми в STL не є методами класів і навіть не є дружніми функціями по відношенню до контейнерів, як було раніше. В теперішньому стандарті мови алгоритми – це незалежні шаблонні функції. Їх можна використовувати при роботі як зі звичайними масивами С++, так і з власними класами – контейнерами.
Типові алгоритми STL:
find Повертає перший елемент із зазначенням значення
count Рахує кількість елементів, які мають зазначені значення
equal Порівнює вміст двох контейнерів і повертає true, якщо всі
відповідні
елементи еквівалентні
search Шукає послідовність значень в одному контейнері, яка відповідає
такій же у другому
copy Копіює послідовність значень із одного контейнера в інший ( або
в інше місце цього ж контейнера)
swap Обмінює значення, які зберігаються в різних місцях
iter swap Обмінює послідовності значень, які зберігаються в різних місцях
fill Копіює значення в послідовність комірок
sort Сортує значення у вказаному порядку
merge Комбінує два сортованих діапазони значень для одержання
найбільшого діапазону
accumulate Повертає суму елементів в заданому діапазоні
for each Виконує вказану функцію для кожного елемента контейнера
Алгоритми STL виконують різні операції над наборами даних. Були розроблені спеціально для контейнерів, але їх перевага в тому, що їх можна застосовувати до звичайних масивів С++.
