Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_OP / T7.doc
Скачиваний:
101
Добавлен:
17.03.2016
Размер:
2 Мб
Скачать
☆

Вказівники на функції

Сучасні мови програмування, зокрема C++, підтримують мехазнім ор­га­нізації вказівників на функ­ції, які зберігають адресу функції (адресу її пер­шого виконуваного оператора).

Загальний синтаксис оголошення вка­зів­ника на функцію має вигляд:

тип_результату (*покажчик)(список_параметрів).

Тоді загальний синтаксис виклику функції через вказівник виглядає так:

(*покажчик)( список_параметрів).

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

int funct1(int, double);   // прототип функції funct1

int funct2(int, double); // прототип функції funct2

int main()

{ int (*p)(int, double);    // оголошення вказівника на функцію

p= funct1;             // організація вказівника на funct1

int i= p(1, 2);         // виклик funct1 через вказівник

p= funct2;             // переадресація вказівника на funct2

i= p(1,2);             // виклик funct2 через вказівник

i= (*p)(1,2);          // виклик в старому форматі

system("pause");

}

int funct1(int i1, double i2) // оголошення функції funct1

{ return (i1+ int(i2));

}

int funct2(int i1, double i2) // оголошення функції funct2

{ return (i1- int(i2));

}

Використання вказівника на функцію дає змогу передавати функції як аргументи при виклику інших функцій. Наприклад, треба надрукувати таблиці значень функцій x3–x+1 і ex–3 на відрізку [a, b] із кроком h.

float lower, upper, step; float Polynom(float); float Exponent(float); void Print (float, float, float, float (*)(float));

//========== головна функція =============================

int main() { cout<<“Еnter lower, upper bounds and step"; cin>>lower>>upper>>step;

Print (lower, upper, step, Polynom); Print (lower, upper, step, Exponent); system("pause");

}

// ======== визначення функції Polynom ========

float Polynom (float x)

{ return pow(x, 3)-x+1; }

// ======== визначення функції Exponent ========

float Exponent (float x)

{ return exp(x-3); }

// ======== визначення функції друку Print ========

void Print (float a, float b, float h, float (*func)(float))

{ float x;

cout<<"================== "<<endl;

x=a; while (x<b)

{ printf("%6.1f | %10.6f\n", x, (*func)(x));

x+=h;

}

}

Отримаємо наступний результат:

Для оголошення вказівників на функції рекомендується викорис­то­вувати директиву typedef за допомогою якої вводиться короткий синонім (псевдоім’я) взамін великих декларативних конструкцій. Наприклад,

typedef void (*type)(void); // визначення імені типу type

type p;

// ======== визначення функції F1 ========

void F1(void)

{ cout <<"F1";

}

// ======== визначення функції F2 ========

void F2(void)

{ cout <<"F2";

}

//========== головна функція =============================

int main()

{ p = F1;

p();

p=F2;

p();

system("pause");

}

Відеокопія результату:

Соседние файлы в папке lektsii_OP