Hvordan bruke funksjonspekere i C ++

Hvordan bruke funksjonspekere i C ++

I c++, funksjonspekere Gi et potent verktøy for å manipulere funksjoner som data. EN Funksjonspeker er en variabel som har en funksjons minneadresse. Den fungerer på samme måte som en standard peker bortsett fra at den lagrer adressen til en funksjon i stedet for adressen til et dataobjekt. Det er avgjørende å huske på det funksjonspekere er ganske enkelt en annen slags variabel i C ++, og som sådan må de erklæres og initialiseres på samme måte som andre variabler.

Definere en funksjonspeker

Syntaksen for å erklære en Funksjonspeker er som følgende:

return_type (*func_ptr_name) (parameter_list);

Her, func_ptr_name er navnet på Funksjonspeker, return_type er returtypen på funksjonen, og parameter_list er listen over parametere som funksjonen tar.

Her er et kodeeksempel for å bruke en funksjonspeker i C++.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
void Cube (int x)

cout<<"The cube of a number is "<
int main ()

void (*FunPtr) (int);
FUNPTR = &cube;
FunPtr (5);
retur 0;

I koden over, Funksjonspeker er erklært som ugyldig (*FunPtr) (int), og den initialiseres ved å lagre adressen til kube () -funksjonen i FUNPTR, som betyr FUNPTR peker på funksjonen kube (). Dermed kan vi kalle kubefunksjonen ved å bruke FunPTR (Funksjonspeker) som i koden Funptr (5).

Produksjon

EN Funksjonspeker, I motsetning til andre pekere, peker på kode i stedet for data. EN Funksjonspeker lagrer ofte begynnelsen på kjørbar kode. I motsetning til standardpekere, bruker vi ikke funksjonspekere å tildele eller frigjøre minnet. Som vi så i programmet over, er det også mulig å bruke funksjonens navn for å bestemme plasseringen. De samme reglene som gjelder for normale pekere gjelder også for en rekke funksjonspekere. Bruk av funksjonspekere kan brukes i stedet for brytertilfeller. EN Funksjonspeker kan leveres som et argument og returneres fra en funksjon, akkurat som en datapeker kan.

Fordeler med funksjonspekere

De viktigste fordelene med funksjonspekere er oppført nedenfor.

1: gjenbrukbarhet av kode

En av de viktigste fordelene ved å bruke funksjonspekere er at de tillater gjenbrukbarhet i koden. I stedet for å måtte skrive unike funksjoner for alle omstendigheter, kan du designe funksjoner som er generelle nok til å håndtere en rekke forskjellige slags inngangsdata ved å definere en Funksjonspeker Skriv og bruk den konsekvent gjennom koden din. I stedet er alt du trenger å gjøre å gi riktig Funksjonspeker ved kjøretid eller gjennom en konfigurasjonsfil, og funksjonen vil tilpasse seg kravene til den nåværende jobben. Dette fremskynder ikke bare utviklingsprosessen, men forbedrer også kodens modularitet og langsiktig vedlikeholdbarhet.

2: Dynamisk kjøretidsatferd

Evnen til å implementere dynamisk runtimeatferd er en annen fordel ved å bruke funksjonspekere. For eksempel kan du ha en funksjon som utfører en spesifikk beregning, men den nøyaktige algoritmen som brukes til å utføre at beregningen vil avhenge av brukerinngang eller systembetingelser. Ved å lagre en Funksjonspeker som tilsvarer hver mulig algoritme, kan du velge den aktuelle på kjøretid ved hjelp av IF-Else-utsagn eller annen betinget logikk. Ved å gjøre dette, kan du utvikle svært fleksibel kode som kan svare på endrede forhold uten å nødvendiggjøre et helt program ombygging.

3: Fleksibilitet

I c++, funksjonspekere tilby et kraftig verktøy for å lage fleksibel, generisk kode. Funksjonspekere er i hovedsak variabler som holder adressen til en funksjons minneplassering. De gjør at funksjoner kan lagres i datastrukturer som matriser eller lister, levert som argumenter til andre funksjoner, og til og med brukt til å dynamisk velge riktig funksjon som skal utføres basert på runtime -omstendigheter eller brukerinngang.

Konklusjon

Funksjonspekere I C ++ er effektive som støtter dynamisk runtime atferd og gjenbruk av kode. Du kan skrive ekstremt fleksibel og adaptiv kode som kan tilpasse seg endrede krav over tid ved å lagre adressene til funksjoner i variabler. Funksjonspekere er nødvendige for hver profesjonell C ++ -koder, til tross for at de kan kreve litt arbeid for å lære.