Wskaźnik na funkcję
Ostatnio zmodyfikowano 2015-04-23 00:50
pytalski Temat założony przez niniejszego użytkownika |
Wskaźnik na funkcję » 2015-04-22 23:47:56 Witam Mam takie zadanie: Stworzyć funkcję zmniejsz/zwiększ zwracającą zmienione wartości podane jako argumenty. I tutaj zacytuję dalszą cz. zadania : "zdefiniowana zostanie funkcja dzialanie() wywołująca (za pomocą wskaźnika)funkcję zwieksz() lub zmniejsz(). Wskaźnik do funkcji zwieksz() lub zmniejsz() (użytkownik dokonuje wyboru działania) jest przekazywany jako argument do funkcji dzialanie(). " Czytałem tematy (nie tylko na cpp0x) na temat wskaźników na funkcję, napisałem kod, ale jest on zły. Jak można go poprawić? #include <iostream>
using namespace std;
float zwieksz( float & x, float & d ) { return x + d; }
float zmniejsz( float & x, float & d ) { return x - d; }
void dzialanie( float a1, float b1 ) { int a; float x, d; cout << "Podaj x i d: "; cin >> x >> d; cout << "Podaj dzialanie: 1 - dodawanie; 2- odejmowanie"; cin << a; if( a == 1 ) { cout << a1( x, d ); } else if( a == 2 ) { cout << b1( x, d ); } }
int main() { float( * pf )( float, float ); float( * du )( float, float ); pf = zwieksz; du = zmniejsz; dzialanie( pf, du ); return 8; }
|
|
colorgreen19 |
» 2015-04-22 23:52:27 Nie wywołujesz pf i du z argumentami. |
|
notabigthreat |
» 2015-04-22 23:59:57 Nie ten operator. Tu: float zwieksz( float & x, float & d ) { return x + d; }
float zmniejsz( float & x, float & d ) { return x - d; }
Funkcje masz jako zwracające float, a przyjmujące dwie referencje do floatów. Pokazać więc możesz na nie tylko wskaźnikiem na funkcje zwracające float, a przyjmujące dwie referencje do floatów, czyli: float( * pf )( float &, float & ); float( * du )( float &, float & );
Jeśli zaś chcesz mieć takie właśnie wskaźniki, jak w twoim poście, to te funkcje muszą przyjmować przez wartość. Jeszcze jedno, funkcja ma przyjmować wskaźniki na funkcje: void dzialanie( float( * a1 )( float &, float & ), float( * b1 )( float &, float & ) ) {
Reszta chyba okej. |
|
pytalski Temat założony przez niniejszego użytkownika |
» 2015-04-23 00:50:24 OK, działa. Dzięki @colorgreen19 i @notabigthreat :) |
|
« 1 » |