Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота №2 Функції в С .doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
80.38 Кб
Скачать

2.3. Перевантаження функцій

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

#include <iostream>

#include <string.h>

using namespace std;

//порівняння двох цілих чисел

int max(int а, int b)

{

if (a>b) return а;

else return b;

}

//порівняння двох дійсних чисел

float max(float а, float b)

{

if(a>b) return а;

else return b;

}

//порівняння двох рядків

char* max(char* а, char* b)

{

if (strcmp(а,b) >0) return а;

else return b;

}

void main()

{

int a1,b1;

float a2, b2;

char s1[20];

char s2[20];

cout<<"\nfor int:\n";

cout<<"a=?";cin>>a1;

cout<<"b=?";cin>>b1;

cout<<"\nMAX="<<max(a1,b1) <<"\n";

cout<<"\nfor float:\n";

cout<<"a=?";cin>>a2;

cout<<"b=?";cin>>b2;

cout<<"\nMAX="<<max(a2,b2) <<"\n";

cout<<"\nfor char*:\n";

cout<<"a=?";cin>>s1;

cout<<"b=?";cin>>s2;

cout<<"\nMAX="<<max(s1,s2) <<"\n";

}

Правила опису перевантажених функцій:

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

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

  • Функції не можуть бути перевантажені, якщо опис їх параметрів відрізняється тільки модифікатором const або наявністю посилання: функції int& f1(int&, const int&){.} і int f1(int, int){.} – не є перевантаженими, оскільки компілятор не зможе визначити яка з функцій викликається, тому що немає синтаксичних відмінностей між викликом функції, яка передає параметр за значенням і функції, яка передає параметр за посиланням.

2.3. Шаблони функцій

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

template <class ім’я_типу [,class ім’я_типу]>

заголовок_функції

{

тіло функції

}

Таким чином, шаблон сімейства функцій складається з 2 частин – заголовка шаблона: template <список параметрів шаблона> і звичайного визначення функції, в якому замість типу значення, що повертається, і/або типу параметрів, записується ім'я типу, визначене в заголовку шаблона.

//порівняння двох чисел будь-якого типу

template<class T>

T max(T а, T b)

{

if (a>b) return а;

else return b;

}

Шаблон служить для автоматичного формування конкретних описів функцій за тими викликами, які компілятор знаходить в програмі. Наприклад, якщо в програмі виклик функції здійснюється як max(1,5), то компілятор сформує визначення функції int max(int а, int b){…}.