Funktionsmarkør i C++
Forudsætninger:
Pointere er symbolske repræsentationer af adresser. De gør det muligt for programmer at simulere call-by-reference samt at skabe og manipulere dynamiske datastrukturer. Iteration over elementer i arrays eller andre datastrukturer er en af de vigtigste anvendelser af pointere.
Adressen på den variabel, du arbejder med, er tildelt den pointervariabel, der peger på den samme datatype (såsom en int eller streng).
Syntaks :
datatype *var_name;
Funktionens adresse: Vi ved alle, at hver funktions kode ligger i hukommelsen, så hver funktion har en adresse som alle andre variabler i programmet. Navnet på en funktion kan bruges til at finde adressen på funktionen. Vi kan få adressen på en funktion ved blot at skrive funktionens navn uden parentes i funktionen.
For at vide mere om dette, henvises til artiklen – funktionens adresse .
Funktionsmarkør i C++
- Funktionsmarkøren bruges til at pege på funktioner, ligesom pointerne bruges til at pege på variable.
- Det bruges til at gemme en funktions adresse.
- Funktionsmarkøren bruges enten til at kalde funktionen, eller den kan sendes som et argument til en anden funktion.
Funktionsmarkør i C++
Syntaks :
return_type (*FuncPtr) (parameter type, ....);
Reference og dereference af funktionsmarkøren i C++
I lighed med den markør, der bruges med variabler, udfører vi referencer og dereferencer med en funktionsmarkør.
Reference: Når markøren tildeles adressen på den funktion, der skal tilknyttes den, kaldes denne proces som reference.
Derhenvisning: Når vi bruger (*)-operatoren til at få værdien gemt i markøren.
Syntaks:
// Declaring return_type (*FuncPtr) (parameter type, ....); // Referencing FuncPtr= function_name; // Dereferencing data_type x=*FuncPtr;
Funktionsmarkør bruges til at kalde funktionen
I dette ser vi, hvordan vi peger en pointer til en funktion og kalder den ved hjælp af denne pointer. Det er en effektiv måde at bruge
Eksempel:
C++
// C++ program to implementation> // Function Pointer> #include> using> namespace> std;> int> multiply(> int> a,> int> b) {> return> a * b; }> int> main()> {> > int> (*func)(> int> ,> int> );> > // func is pointing to the multiplyTwoValues function> > func = multiply;> > int> prod = func(15, 2);> > cout < <> 'The value of the product is: '> < < prod < < endl;> > return> 0;> }> |
Produktion
The value of the product is: 30
I ovenstående program erklærer vi en funktion multiplicerer, hvor vi multiplicerer to elementer a og b, og returnerer derefter resultatet. Men i stedet for at kalde funktionen direkte, bruger vi en funktionsmarkørprod, som gør det samme arbejde for os.
Sender en funktionsmarkør som parameter
Når vi erklærer en funktionsmarkør for at gemme hukommelsesadressen for funktionen, men når vi ønsker at overføre returværdien til den næste funktion. Vi har to metoder til at udføre denne opgave. Først skal du enten videregive den værdi, vi fik, eller derefter sende den funktionsmarkør, der allerede eksisterer.
Eksempel:
C++
// C++ Program for demonstrating> // function pointer as pointer> #include> using> namespace> std;> const> int> a = 15;> const> int> b = 2;> // Function for Multiplication> int> multiply() {> return> a * b; }> // Function containing function pointer> // as parameter> void> print(> int> (*funcptr)())> {> > cout < <> 'The value of the product is: '> < < funcptr()> > < < endl;> }> // Driver Function> int> main()> {> > print(multiply);> > return> 0;> }> |
Produktion
The value of the product is: 30
Tidskompleksitet: O(1).
Hjælpeplads: O(1).
I ovenstående program erklærer vi en multiplikationsfunktion, hvor vi multiplicerer 2 variable a og b. Vi sender funktionsmarkøren som en parameter i printfunktionen, her bruger vi funktionsmarkøren til at beregne værdien fra multiplikationsfunktionen og derefter denne værdi i printfunktionen.