« Wskaźnik na funkcję, lekcja »
Rozdział opisuje jak stworzyć wskaźnik na funkcję oraz jak z niego korzystać. (lekcja)
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!
Autor: Piotr Szawdyński
Kurs C++

Wskaźnik na funkcję

[lekcja] Rozdział opisuje jak stworzyć wskaźnik na funkcję oraz jak z niego korzystać.
Pisząc swoje programy czasami mamy potrzebę określenia zachowania algorytmu na podstawie wyniku działania jakiejś funkcji. Praktycznym zastosowaniem wskaźników na funkcje jest funkcja sortująca » standard Cqsort. W niniejszym rozdziale dowiesz się w jaki sposób pisać własne funkcje, które mogą przyjmować jako argument wskaźnik na funkcję.

Jak utworzyć definicję wskaźnika na funkcję?

  • Mamy deklarację funkcji:
    C/C++
    int mojaFunkcja( float a, int b, const char * c );
  • Oczyszczamy ją z nazw argumentów:
    C/C++
    int mojaFunkcja( float, int, const char * );
  • Nazwę funkcji zmieniamy na jakąś nową nazwę i dopisujemy na początku typedef:
    C/C++
    typedef int nazwaTypuT( float, int, const char * );
  • Nazwę typu umieszczamy w nawiasach zaokrąglonych:
    C/C++
    typedef int( nazwaTypuT )( float, int, const char * );
  • Przed nazwą typu i jednocześnie za wstawionym nawiasem otwierającym, dostawionym w poprzednim kroku - umieszczamy gwiazdkę:
    C/C++
    typedef int( * nazwaTypuT )( float, int, const char * );

Jak zapisać adres funkcji do wskaźnika?

C/C++
nazwaTypuT pWskaznikNaFunkcje = mojaFunkcja;

Jak wywołać funkcję zapisaną we wskaźniku?

C/C++
int iWynik = pWskaznikNaFunkcje( 123.4f, 567, "Koniec" );

Przykład

C/C++
#include <cstdio>

int dodawanie( int a, int b );
int mnozenie( int a, int b );

typedef int( * dzialanieT )( int, int );

int oblicz( int a, int b, dzialanieT pDzialanie );
int obliczBezDefinicji( int a, int b, int( * pDzialanie )( int, int ) );

int main()
{
    printf( "Wynik mnozenia = %d\n", oblicz( 3, 4, mnozenie ) );
    printf( "Wynik dodawania = %d\n", oblicz( 3, 4, dodawanie ) );
    printf( "Wynik mnozenia = %d\n", obliczBezDefinicji( 3, 4, mnozenie ) );
    printf( "Wynik dodawania = %d\n", obliczBezDefinicji( 3, 4, dodawanie ) );
    return 0;
}

int dodawanie( int a, int b )
{
    return a + b;
}

int mnozenie( int a, int b )
{
    return a * b;
}

int oblicz( int a, int b, dzialanieT pDzialanie )
{
    return pDzialanie( a, b );
}

int obliczBezDefinicji( int a, int b, int( * pDzialanie )( int, int ) )
{
    return pDzialanie( a, b );
}
Standardowe wyjście programu:
Wynik mnozenia = 12
Wynik dodawania = 7
Wynik mnozenia = 12
Wynik dodawania = 7
Poprzedni dokumentNastępny dokument
Wirtualne destruktoryWskaźniki