Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Тіло функції




}

 

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

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

 

#include <iostream>

using namespace std;

 

//Функція-шаблон

template <class A> void swap1(A&x, A&y)

{

A temp;

temp = x;

x = y;

y = temp;

}

 

void main()

{

int a, b;

a = 5; b = 10;

double x, y;

x = 5.8; y = 10.27;

 

cout<<"a = "<<a<<" b = "<<b<<"\n";

cout<<"x = "<<x<<" y = "<<y<<"\n";

 

swap1(a, b); //обмін цілих чисел

swap1(x, y); //обмін дійсних чисел

 

cout<<"a = "<<a<<" b = "<<b<<"\n";

cout<<"x = "<<x<<" y = "<<y<<"\n";

}

 

Результат виконання програми наступний:

 

a = 5 b = 10

x = 5.8 y = 10.27

a = 10 b = 5

x = 10.27 y = 5.8

 

Ключове слово template використовується для визначення родової функції. Рядок:

 

template <class A> void swap1(A&x, A&y)

 

повідомляє компілятору дві речі: по-перше, створюється шаблон, та по-друге, починається визначення родової функції. Тут A – родовий тип даних. Після рядка з ключовим словом template функція swap() оголошується з типом даних A значень, що обмінюються. У функції main() функція swap1() викликається з двома різними типами даних: цілими та дійсними. Оскільки функція swap1() – родова функція, компілятор автоматично створює дві її версії: одну для обміну цілих значень, іншу для обміну дійсних значень.

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

 

#include <iostream>

using namespace std;

 

//Функція-шаблон

template <class type1, class type2>

void myfunc(type1 x, type2 y)

{

cout<<"x = "<<x<<" y = "<<y<<"\n";

}

 

void main()

{

myfunc(10,"Hello");

myfunc(5.15,13L);

}

 

Результат виконання програми наступний:

 

x = 10 y = Hello

x = 5.15 y = 13

 

У даному прикладі при генерації конкретних екземплярів функції myfunc(), типи даних type1 та type2 замінюються компілятором на типи даних int та char* або double та long відповідно.

 

Контрольні питання

 

1. Що таке функція?

2. Розкрийте сутність глобальних та локальних змінних.

3. Чим відрізняються автоматичні та статичні змінні?

4. Які ви знаєте способи передачі змінних до функції?

5. В чому відмінність передачі змінних по значенню та за посиланням?

6. Для чого потрібен прототип функції?

7. Як передавати значення змінних функції за умовчанням?

8. Розкрийте сутність статичних змінних.

9. Наведіть приклад передачі змінних по значенню.

10. Наведіть приклад передачі змінних за посиланням.

11. Яким чином передати одновимірний масив до функції?

12. Яким чином передати двовимірний масив до функції?

13. Що таке вказівка на функцію?

14. Як передати ім’я (адресу) функції у якості параметру до іншої функції?

15. Застосування перевизначення типів typedef для опису вказівок на функції.

16. Наведіть приклади передачі вказівок функції.

17. Що таке перевантаження функцій?

18. Наведіть приклади перевантаження функцій.

19. Що таке шаблони функцій?

20. Наведіть приклади використання шаблонів функцій.


Поделиться:

Дата добавления: 2014-12-30; просмотров: 121; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты