Funktionszeiger erstellen
-
hi
kann mir jemand please erkläre wie Funktionszeiger aufgebaut sind.
Auch wie man sie benutzt und die dazu gehörige Erklärung mit der Syntax?
in meinem buch steht nur ne halbe seite was von Funktionszeigern -.- da steht nicht einmal ein codebeispiel...auch war ich schon auf der englishen homepage funcpointers.org oder so kA^^
mit freundlich grüsen,
masterofmA*
-
im grunde ganz einfach. du kannst in c++ an jeder beliebigen stelle im code ne methodensignatur deklarieren. nen funktionszeiger nutzt das nun aus, um eine solche signatur auf eine tatsächlich methode zeigen zu lassen.
int foo(double x, int y) { return 42; } int main() { int (*bar)(double, int); // signatur bar = foo; // auf methode weisen lassen bar(2.0, 0); // wie methode verwenden }
-
ok danke, ich habs verstanden.
-
Hallo!
Syntax von Funktionszeigern:
[Rückgabetyp] (*[Name]) ([Argumente/Typ]);Beispiel
// Funktionszeiger: // Rückgabtetyp: int // Name: MeinFunktionszeiger // Parameter/Argumente: Typ int int (*MeinFunktionszeiger) (int); // Normale Funktion int Addieren(int add) { int n = 100; return n + add; } // Aufrufen MeinFunktionszeiger = &Addieren; // Der Funktionszeiger zeigt nun auf Addieren std::cout << MeinFunktionszeiger(99) << std:endl; // Ausgabe 99\nHoffe das hilft für den Anfang.
-
Ach, zu langsam.
-
thordk schrieb:
int foo(double x, int y) { return 42; }Das nennst du eine Methode? Du bist mir so ein Held...
-
Kenner der Scene 2 schrieb:
thordk schrieb:
int foo(double x, int y) { return 42; }Das nennst du eine Methode? Du bist mir so ein Held...
wär dir 23 lieber gewesen?
-
thordk schrieb:
Kenner der Scene 2 schrieb:
thordk schrieb:
int foo(double x, int y) { return 42; }Das nennst du eine Methode? Du bist mir so ein Held...
wär dir 23 lieber gewesen?
Ich glaube das bezog sich eher darauf, dass man "Methode" allgemein nur für Funktionen verwendet, die in Klassen definiert sind. Es gibt aber keine wirklich eindeutige Definition.
-
vielleicht sollte man auch anfangen,
auf std::tr1::functionhinzuweisen.
-
Man erwähne auch für mich komische Sachen wie:
void dol(int z) { } void (*func)(int); //Funktionszeiger auf Funktion zeigen lassen func = dol; //oder auch func = &dol; //Funktion durch Funktionszeiger aufrufen func(5); //oder auch (*func)(5);Man sieht es gibt auch immer zwei Möglichkeiten, kann auch noch andere aber geben, bin mir nicht sicher ...
-
Konrad Rudolph schrieb:
thordk schrieb:
Kenner der Scene 2 schrieb:
thordk schrieb:
int foo(double x, int y) { return 42; }Das nennst du eine Methode? Du bist mir so ein Held...
wär dir 23 lieber gewesen?
Ich glaube das bezog sich eher darauf, dass man "Methode" allgemein nur für Funktionen verwendet, die in Klassen definiert sind. Es gibt aber keine wirklich eindeutige Definition.
nach den mir bekannten definitionen ist methode der allgemeinere begriff. wenn man unterscheiden möchte, dann in funktion und prozedur. wobei das mit klassen nichts zu tun hat. gibt ja nicht ohne grund worte wie "memberfunction" etc. ^^
-
hi
kann ich auh mit folgender klasse einen funktionszeiger machen?
class Steuer { public: int get_Miete() { return miete; }; void set_Miete(int xyz) { miete = xyz; } private: int miete; }mit freundlichen grüse masterofmA*
-
edit: sry hab das Semikolon hinter der letzten geschweiften klammer vergessen, bitte nicht als Fehler gelten lassen ^^
-
Nein, Funktionszeiger sind nicht kompatibel zu Klassenmethoden (das Problem ist hauptsächlich der this-Zeiger), aber dafür gibt es in C++ Methodenzeiger:
void (Steuer*::setter)(int) =&Steuer::set_Miete; Steuer st; (Steuer.*setter)(4711);(bei der Klammerung bin ich mir nicht zu 100% sicher)
-
CStoll schrieb:
void (Steuer*::setter)(int) =&Steuer::set_Miete; Steuer st; (Steuer.*setter)(4711);void (Steuer*::setter)(int) =&Steuer::set_Miete; Steuer st; (st.*setter)(4711);
-
KasF schrieb:
CStoll schrieb:
void (Steuer*::setter)(int) =&Steuer::set_Miete; Steuer st; (Steuer.*setter)(4711);void (Steuer*::setter)(int) =&Steuer::set_Miete; Steuer st; (st.*setter)(4711);
void (Steuer::*setter)(int) =&Steuer::set_Miete; Steuer st; (st.*setter)(4711);
-
