C++ tablica wskaźników na funkcje


(karton16) #1

Witam,
muszę napisać program: Napisz dwuargumentowe funkcje liczące iloczyn, iloraz, suma oraz różnicę argumentów. W programie należy stworzyć tablicę wskaźników na funkcje i wypełniź
ją wskaźnikami na napisane funkcje w kolejności podanej przez użytkownika. Następ-
nie w pętli udostępnić użytkownikowi możliwość wyboru numeru funkcji i podania
argumentów oraz wypisać wynik funkcji wywołanej przez wskaźnik z tablicy.

Moje pytanie jest następujące:

  • Jak stworzyć tablicę wskaźników w C++ i jak się nią posługiwać?
  • Czy poniższe wskaźniki do funkcji są poprawne?

Aktualnie mój program wygląda następująco:

#include

using namespace std;

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

double odejmowanie(double a, double b)
{
return a + b;
}

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

double dzielenie(double a, double b)
{
return a/b;
}

int main()
{
double(*Psuma)(double a, double b);
double(*Proznica)(double a, double b);
double(*Piloczyn)(double a, double b);
double(*Piloraz)(double a, double b);
Psuma = dodawanie;
Proznica = odejmowanie;
Piloczyn = mnozenie;
Piloraz = dzielenie;

}


(Fizyda) #2

Tak samo jak normalną tablicą.

Nie do końca, o ile deklaracja wskaźników jest dobra to już nie jest dobra i inicjalizacja. Powinno być mniej więcej:

Psuma = &dodawanie;

Jeśli chodzi o syntaks deklaracji tablicy do funkcji to tutaj myślę, że znajdziesz pomocne przykłady: https://stackoverflow.com/questions/5093090/whats-the-syntax-for-declaring-an-array-of-function-pointers-without-using-a-se.
Dodatkowo jeśli chciałbyś mieć program fajnie napisany i zrobić wrażenie na zajęciach to możesz zainteresować się jeszcze funkcjami lambda, w tedy nie musisz w ogóle tak jak teraz pisać ich definicji tylko od razu przekazać je niejako do tablicy. W tedy nie będzie się dało ich wywołać inaczej niż poprzez wskaźnik w tablicy.


(karton16) #3

Czyli mogę zrobić coś w stylu:

double *Twskaznikow[3];
double(*Psuma)(double a, double b);
double(*Proznica)(double a, double b);
double(*Piloczyn)(double a, double b);
double(*Piloraz)(double a, double b);
Psuma = &dodawanie;
Proznica = &odejmowanie;
Piloczyn = &mnozenie;
Piloraz = &dzielenie;

Twskaznikow[0] = Psuma;
Twskaznikow[1] = Proznica;
Twskaznikow[2] = Piloczyn;
Twskaznikow[3] = Piloraz;


(Fizyda) #4

Nie bo utworzyłeś tablicę wskaźników na typ double, a nie na funkcje. Bez sprawdzenia głowy sobie uciąć nie dam, ale na podstawie tego co Ci podlinkowałem wcześniej to powinno być coś takiego:

double (* arr [4])(double, double);

arr[0] = &dodawanie;
arr[1] = &odejmowanie;
arr[2] = &mnozenie;
arr[3] = &dzielenie;