Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaźnik na funkcję

Ostatnio zmodyfikowano 2015-04-23 00:50
Autor Wiadomość
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ć?

C/C++
#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;
}
 
P-131296
colorgreen19
» 2015-04-22 23:52:27
Nie wywołujesz  pf i du  z argumentami.
P-131299
notabigthreat
» 2015-04-22 23:59:57
C/C++
cin << a;
Nie ten operator.

Tu:
C/C++
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:

C/C++
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:
C/C++
void dzialanie( float( * a1 )( float &, float & ),
/*drugi taki sam*/ float( * b1 )( float &, float & ) ) {
Reszta chyba okej.
P-131301
pytalski
Temat założony przez niniejszego użytkownika
» 2015-04-23 00:50:24
OK, działa. Dzięki @colorgreen19 i @notabigthreat :)
P-131303
« 1 »
  Strona 1 z 1