peababy.pages.dev









Hur ser ett funktionsanrop ut i c++

Funktion (programmering)

Inom programmering existerar enstaka funktion, även subrutin, procedur, metod, underprogram alternativt subprogram, ett sektion från en datorprogram likt kunna anropas på grund av för att utföra ett viss övning oberoende från resten från koden. ett funktion utformas ofta på grund av för att behärska anropas flera gånger ifrån olika ställen inom programmet samt man skickar då ofta tillsammans med parametrar (argument) mot funktionen.

enstaka funktion innehåller en kodblock likt teoretiskt sett förmå existera oändligt stort samt förmå inom sig fungera såsom en eget schema (därav namnet underprogram).

En funktion kan skrivas så att den förväntar sig en eller flera parametrar från programmet som anropar den, och den kan även returnera ett resultat

En funktion är kapabel även returnera en värde, mot modell en konsekvens från ett kalkyl. inom vissa programspråk, mot modell Fortran samt Pascal, görs enstaka åtskillnad mellan funktioner, vilket returnerar en värde, samt procedurer, likt ej fullfölja detta. inom andra programspråk, mot modell C samt Lisp, görs ej denna åtskillnad.

inom objektorienterad programmering kallas enstaka funktion liksom existerar ett sektion från en objekt till enstaka metod.

Funktioner existerar en kraftfullt verktyg likt finns inom dem flesta programspråk samt används inom strukturerad programmering på grund av för att (bland annat):

  • Slippa nedteckna identisk sak flera gånger
  • Göra stora schema lätta för att överblicka
  • Slippa utföra ändringar vid flera ställen inom en program
  • Låta flera programmerare jobba tillsammans olika delar från koden samtidigt vid en enkelt sätt

Alternativet existerar en schema tillsammans med linjär kod, liksom ej innehåller några anrop mot funktioner.

en sådant schema körs snabbare eftersom anropen (hoppen) tar period, dock å andra sidan återanvänder man ej koden vilket utför för att programmet tar mer ställe inom datorminnet samt cachen.

Många funktioner är just rent matematiska funktioner

Grundkoncept

[redigera | redigera wikitext]

En funktions innehåll kallas dess lekamen, samt detta existerar denna kod såsom kommer för att köras då funktionen anropas (körs). vilket vilket sker existerar för att programräknaren nuvarande värde sparas samt räknaren sätts mot den plats var funktionen börjar, varefter processorn fortsätter för att utföra instruktionerna likt vanligt.

då funktionen existerar tydlig (en return-instruktion påträffas) hoppar den tillbaka mot den adressen liksom sparades undan samt programmet är kapabel gå vidare köras därifrån funktionsanropet gjordes.


  • hur ser  en funktionsanrop ut  inom c++

  • En funktion förmå tecknas sålunda för att den förväntar sig enstaka alternativt flera parametrar ifrån programmet såsom anropar den, samt den är kapabel även returnera en utfall. Några modell existerar ett slumptalsfunktion, alternativt enstaka funktion likt beräknar ut kvadratroten ur en anförande.

    flera funktioner existerar just rent matematiska funktioner. dock detta finns även funktioner tillsammans sidoeffekter, sådana vilket stänger från alternativt pausar programmet, ändra information inom minnet alternativt läser alternativt skriver mot ett fil. Just liknande funktioner karaktäriserar imperativ programmering.

    Funktioner är kapabel även anropa sig själva, vilket kallas rekursion.

    Funktionell programmering (även kallad FP) är ett sätt att tänka kring mjukvarukonstruktion genom att skapa rena funktioner

    ett sådan funktion tillåter direkt implementation från matematisk induktion samt splittra samt härska-algoritmer. Några typiska modell vid detta existerar sorteringsalgoritmer samt fakultetberäkning.

    En funktion vars enda avsikt existerar för att returnera en sanningsvärde: sant alternativt falskt, brukar kallas predikatfunktion.

    Historia

    [redigera | redigera wikitext]

    Självmodifierande kod

    [redigera | redigera wikitext]

    Innan anropsinstruktioner fanns fick man utföra funktioner tillsammans hjälp från självmodifierande kod. Innan man hoppade mot adressen var funktionskoden nedsänkt, lät man ett instruktion ändra återhoppsinstruktionen inom slutet från funktionens lekamen således för att den skulle hoppa igen mot riktig plats då den plats genomskinlig.

    Några exempel är en slumptalsfunktion, eller en funktion som räknar ut kvadratroten ur ett tal

    Anropsstacken

    [redigera | redigera wikitext]

    Moderna implementationer använder ett anropsstack till för att hålla reda vid returadresser då funktioner anropas från andra funktioner. då ett funktion anropas sparas returadressen överst inom stacken, samt angående ytterligare en funktionsanrop görs inne inom denna funktion kommer ett fräsch returadress för att läggas ovanpå, detta önskar yttra överst inom stacken.

    då ett funktion existerar genomskinlig kommer programmet för att returnera mot adressen överst inom stacken.

    Metod

    [redigera | redigera wikitext]

    Inom objektorienterad programmering existerar ett metod enstaka funktion vilket antingen tillhör enstaka klass (klassmetod) alternativt enstaka instans (instansmetod).

    Virtuell funktion

    [redigera | redigera wikitext]

    En virtuell funktion alternativt virtuell metod ett funktion vilket definieras inom enstaka klass likt förmå bli omdefinierad (överskriven) från subklasser, även ifall den statiska typen från en objekt ej existerar densamma såsom den faktiska typen.

    Ett värde som utparameter: maxvarde = max(v); Två värden som utparametrar: [maxvarde,maxindex] = max(v); UPPGIFT: Skriv en funktion som beräknar funktionen x3 + sin(x) och dess derivata

    I ett sektion tungomål likt mot modell C++, C# samt Object Pascal måste enstaka klass medlemsfunktioner uttryckligen deklareras vilket virtuella. inom andra tungomål såsom Ruby samt Java existerar samtliga medlemsfunktioner virtuella.

    För virtuella funktioner förmå hoppadressen till en anrop ej avgöras beneath kompileringen eftersom den exakta typen från detta objekt liksom existerar objekt på grund av anropet ej existerar känt.

    Hoppet blir alltså omväg, vilket ger ett små prestandaförsämring.

    Exempel på utparametrar vid anrop av Matlabfunktioner

    Exempel

    [redigera | redigera wikitext]

    I nedanstående C++-exempel äger oss enstaka klasshierarki baserad vid klassen vilt, tillsammans med ett virtuell funktion såsom skriver ut hur djuret luktar. inom huvudprogrammet instansierar oss en objekt från vardera klassen samt anropar .

    #include<iostream>usingnamespacestd;classDjur{public:virtualvoidlukta(){cout<<"Jag luktar vilket en vanligt djur."<<endl;}};classGris:publicDjur{public:voidlukta(){cout<<"Jag luktar såsom ett gris."<<endl;}};classFisk:publicDjur{public:voidlukta(){cout<<"Jag luktar likt enstaka fisk."<<endl;}};classAnnatDjur:publicDjur{};intmain(){Djur*djur[4];djur[0]=newDjur();djur[1]=newGris();djur[2]=newFisk();djur[3]=newAnnatDjur();for(inti=0;i<4;i++)djur[i]->lukta();return0;}

    Här existerar resultatet från ett körning:

    Jag luktar vilket en vanligt vilt.

    Jag luktar såsom enstaka svin. Jag luktar såsom ett vattendjur.

    När du anropar en funktion kör den de påståenden som lagts till i dess kropp

    Jag luktar likt en vanligt vilt.

    Trots för att huvudprogrammet ej vet för att pekar vid en objekt från typen svin – variabelns statiska typ existerar alltjämt vilt – därför äger uppenbarligen koden inom klassen svin exekverats. Detta ägde ej hänt ifall ej ägde markerats likt virtuell; då ägde inom samtliga fall funktionen inom basklassen vilt exekverats.