Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Приклад шаблонної функції




Тіло функції

Узагальнені (шаблонні) функції і типи в С++.

Віртуальні функції в С++. Чисто віртуальні функції.

Віртуальна функція (virtual function) — це функція-член, оголошена в базовому класі і перевизначена в похідному. Щоб створити віртуальну функцію, слід вказати ключове слово virtual перед її оголошенням в базовому класі. Похідний клас перевизначає цю функцію, пристосовувавши її для своїх потреб. По суті, віртуальна функція реалізує принцип "один інтерфейс, декілька методів", лежачий в основі поліморфізму. Віртуальна функція в базовому класі визначає вид інтерфейсу, тобто спосіб виклику цієї функції. Кожне перевизначення віртуальної функції в похідному класі реалізує операції, властиві лише даному класу. Інакше кажучи, перевизначення віртуальної функції створює конкретний метод (specific method).

Чисто віртуальна функція (pure virtual function) – це функція, що не має визначення в базовому класі. Для оголошення чисто віртуальної функції використовується наступна синтаксична конструкція.

 

virtual тип імя_функції (список_параметрів) = 0;

 

Чисто віртуальні функції повинні перевизначатися в кожному похідному класі, інакше виникне помилка компіляції.

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

template <typename T> тип_значення_що_повертається ім’я_функції(список_параметрів)

{

}

Тут параметр T задає тип даних, з яким працює функція. Цей параметр можна використовувати й усередині функції, однак при створенні конкретної версії узагальненої функції компілятор автоматично підставить замість нього фактичний тип. За правилами узагальнений тип задається за допомогою ключового слова typename, хоча замість нього можна застосовувати традиційне ключове слово class.

У наступному прикладі демонструється узагальнена функція, що знаходить найбільший серед двох об’єктів.

template <class T>

inline T const& max(T const& a, T const& b)

{

return a< b? b: a;

}

Із шаблонами зв'язано декілька понять. По-перше, узагальнена функція (тобто функція, оголошена за допомогою ключового слова template) називається також шаблоном функції, або шаблонною функцією (template function). Ці терміни є синонімами. Конкретна версія узагальненої функції, створювана компілятором, називається спеціалізацією (specialization) чи згенерованою функцією (generated function). Процес генерації конкретної функції називається конкретизацією (instantiation). Іншими словами, згенерована функція є конкретним екземпляром узагальненої функції. Тип T, що указується в кутових дужках, називається параметром шаблону (або шаблонним параметром), а тип, що указується в списку параметрів (наприклад, int) — параметром виклику.




Поделиться с друзьями:


Дата добавления: 2015-05-23; Просмотров: 683; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.