functions c with types examples
Typen functies in C ++ samen met hun gebruik.
In onze eerdere tutorials tot nu toe hebben we de verschillende concepten in C ++ gezien, zoals variabelen, opslagklassen, operatoren, arrays, strings, enz.
In deze tutorial gaan we verder en bespreken we het concept van functies. Functies worden ook wel methoden, subroutines of procedures genoemd.
Lees hier de uitgebreide serie C ++ Training Tutorial.
sql queries interviewvragen en antwoorden voor 3 jaar ervaring
Wat je leert:
- Hoe definiëren we een functie?
- Typen functies in C ++
- Functie Verklaring
- Functie definitie
- Een functie aanroepen
- Formele en feitelijke parameters
- Retourwaarden
- Ongeldige functies
- Parameters doorgeven aan functies
- Standaardparameters
- Const Parameters
- Inline-functies
- Structs gebruiken in functies
- Gevolgtrekking
- Aanbevolen literatuur
Hoe definiëren we een functie?
Een functie is een set instructies die zijn samengesteld om een specifieke taak uit te voeren. Het kunnen uitspraken zijn die een aantal herhaalde taken uitvoeren of uitspraken die een aantal speciale taken uitvoeren, zoals afdrukken enz.
Een gebruik van functies is om de code te vereenvoudigen door deze op te splitsen in kleinere eenheden die functies worden genoemd. Nog een ander idee achter het gebruik van functies is dat we hierdoor niet steeds dezelfde code hoeven te schrijven. We hoeven maar één functie te schrijven en deze vervolgens aan te roepen als dat nodig is, zonder steeds dezelfde set instructies te hoeven schrijven.
Typen functies in C ++
In C ++ hebben we twee soorten functies, zoals hieronder weergegeven.
Ingebouwde functies
Ingebouwde functies worden ook wel bibliotheekfuncties genoemd. Dit zijn de functies die worden geleverd door C ++ en we hoeven ze niet zelf te schrijven. We kunnen deze functies direct gebruiken in onze code.
Deze functies worden in de headerbestanden van C ++ geplaatst. Bijvoorbeeld ,, zijn de kopteksten die respectievelijk ingebouwde wiskundige functies en tekenreeksfuncties hebben.
Laten we een voorbeeld bekijken van het gebruik van ingebouwde functies in een programma.
Uitgang:
Voer de invoerstring in: Software Testing Help
String ingevoerd: Software Testing Help!
Maat snaar: 21
Hier gebruiken we de headers en. De gegevenstypen en andere invoer- / uitvoerfuncties zijn gedefinieerd in de bibliotheek. String-functies die worden gebruikt zoals getline, size maken deel uit van de header.
Door de gebruiker gedefinieerde functies
Met C ++ kunnen gebruikers ook hun eigen functies definiëren. Dit zijn de door de gebruiker gedefinieerde functies. We kunnen de functies overal in het programma definiëren en deze functies vervolgens vanuit elk deel van de code aanroepen. Net als variabelen, moet het worden gedeclareerd voordat ze worden gebruikt, moeten functies ook worden gedeclareerd voordat ze worden aangeroepen.
Laten we de door de gebruiker gedefinieerde functies in detail bespreken.
De algemene syntaxis voor door de gebruiker gedefinieerde functies (of gewoon functies) is als volgt:
Dus zoals hierboven getoond, heeft elke functie:
- Retourtype: Het is de waarde dat de functies terugkeren naar de aanroepende functie na het uitvoeren van een specifieke taak.
- functienaam : ID die wordt gebruikt om een functie een naam te geven.
- Parameterlijst: Aangeduid door param1, param2,… paramn in de bovenstaande syntaxis. Dit zijn de argumenten die worden doorgegeven aan de functie wanneer een functie wordt aangeroepen. De parameterlijst is optioneel, d.w.z. we kunnen functies hebben die geen parameters hebben.
- Functie body: Een groep uitspraken die een specifieke taak uitvoeren.
Zoals eerder vermeld, moeten we een functie ‘declareren’ voordat we deze kunnen gebruiken.
Functie Verklaring
Een functiedeclaratie vertelt de compiler over het retourtype van de functie, het aantal parameters dat door de functie wordt gebruikt en de gegevenstypen. Met inbegrip van de namen van de parameters in de functie, is de declaratie optioneel. De functieverklaring wordt ook wel een functieprototype genoemd.
Ter referentie hebben we enkele voorbeelden van de functieverklaring hieronder gegeven.
Bovenstaande declaratie is van een functie ‘som’ waaraan twee gehele getallen als parameters moeten doorgegeven worden en die een geheel getal teruggeeft.
Dit betekent dat de swap-functie twee parameters van het type int aanneemt en geen enkele waarde retourneert, en daarom is het retourtype ongeldig.
Het functiedisplay accepteert geen parameters en geeft ook geen enkel type terug.
Functie definitie
Een functiedefinitie bevat alles wat een functiedeclaratie bevat en bovendien bevat het ook de body van de functie tussen accolades ({}).
Bovendien zou het ook benoemde parameters moeten hebben. Wanneer de functie wordt aangeroepen, gaat de besturing van het programma over naar de functiedefinitie zodat de functiecode kan worden uitgevoerd. Wanneer de uitvoering van de functie is voltooid, gaat de besturing terug naar het punt waar de functie werd aangeroepen.
Voor de bovenstaande declaratie van swap-functie is de definitie zoals hieronder gegeven:
Merk op dat declaratie en definitie van een functie samen kunnen gaan. Als we een functie definiëren voordat we ernaar verwijzen, is er geen aparte declaratie nodig.
Laten we een compleet programmeervoorbeeld nemen om een functie te demonstreren.
Uitgang:
Voer de twee nummers in die u wilt wisselen: 5 3
a = 5 b = 3
Na het omwisselen: a = 3 b = 5
In het bovenstaande voorbeeld zien we dat er een functie-swap is die twee parameters van het type int neemt en niets retourneert. Het retourtype is ongeldig. Omdat we deze functie hebben gedefinieerd voor de functie main, die een aanroepende functie is, hebben we deze niet afzonderlijk gedeclareerd.
In de functie main lezen we twee gehele getallen en roepen vervolgens de wisselfunctie aan door deze twee gehele getallen eraan door te geven. In de swap-functie worden de twee gehele getallen uitgewisseld met behulp van een standaardlogica en worden de verwisselde waarden afgedrukt.
Een functie aanroepen
Als we een functie in ons programma hebben, dan moeten we, afhankelijk van de vereiste, deze functie aanroepen of aanroepen. Alleen wanneer de functie wordt aangeroepen of aangeroepen, zal de functie zijn set instructies uitvoeren om de gewenste resultaten te leveren.
De functie kan overal in het programma worden aangeroepen. Het kan worden aangeroepen vanuit de hoofdfunctie of vanuit elke andere functie als het programma meer dan één functie gebruikt. De functie die een andere functie aanroept, wordt de 'Belfunctie' genoemd.
In het bovenstaande voorbeeld van het omwisselen van nummers wordt de wisselfunctie aangeroepen in de hoofdfunctie. Daarom wordt de hoofdfunctie de aanroepende functie.
Formele en feitelijke parameters
We hebben al gezien dat we parameters kunnen hebben voor de functies. De functieparameters worden in de functiedefinitie geleverd als een parameterlijst die volgt op de functienaam. Als de functie wordt aangeroepen, moeten we de werkelijke waarden van deze parameters doorgeven, zodat de functie met behulp van deze werkelijke waarden zijn taak kan uitvoeren.
De parameters die zijn gedefinieerd in de functiedefinitie worden aangeroepen Formele parameters De parameters in de functieaanroep die de werkelijke waarden zijn, worden aangeroepen Werkelijke parameters.
In het bovenstaande voorbeeld van het omwisselen van nummers hebben we de opmerkingen geschreven voor formele en feitelijke parameters. In de aanroepende functie, d.w.z. main, wordt de waarde van twee gehele getallen gelezen en doorgegeven aan de swap-functie. Dit zijn de feitelijke parameters.
We kunnen de definities van deze parameters zien in de eerste regel van de functiedefinitie. Dit zijn de formele parameters.
Merk op dat het type formele en daadwerkelijke argumenten overeen moeten komen. De volgorde van formele en werkelijke parameters moet ook overeenkomen.
Retourwaarden
Zodra de functie de beoogde taak heeft uitgevoerd, moet het resultaat worden teruggestuurd naar de aanroepende functie. Hiervoor hebben we het retourtype van de functie nodig. De functie kan een enkele waarde teruggeven aan de aanroepende functie. Het retourtype van de functie wordt gedeclareerd samen met het functie-prototype.
Laten we een voorbeeld nemen van het optellen van twee getallen om de retourtypen te demonstreren.
Uitgang:
Voer de twee cijfers in die u wilt toevoegen: 11 11
Som van de twee cijfers: 22
In het bovenstaande voorbeeld hebben we een functiesom waaraan twee integer-parameters moeten doorgegeven worden en die een integer-type retourneert. In de hoofdfunctie lezen we twee gehele getallen uit de console-invoer en geven deze door aan de somfunctie. Omdat het retourtype een geheel getal is, hebben we een resultaatvariabele op de LHS en is RHS een functieaanroep.
Wanneer een functie wordt uitgevoerd, wordt de uitdrukking (a + b) die wordt geretourneerd door de functie som toegewezen aan de resultaatvariabele. Dit laat zien hoe de retourwaarde van de functie wordt gebruikt.
Ongeldige functies
We hebben gezien dat de algemene syntaxis van functie vereist dat een retourtype wordt gedefinieerd. Maar als we in het geval dat we een dergelijke functie hebben die geen waarde retourneert, wat specificeren we dan als het retourtype? Het antwoord is dat we gebruik maken van het waardeloze type 'void' om aan te geven dat de functie geen waarde retourneert.
In dat geval wordt de functie 'void function' genoemd en zal het prototype er zo uitzien
void functionName (param1, param2,… .param 3);
Notitie : Het wordt als een goede gewoonte beschouwd om een verklaring 'retour' op te nemen; aan het einde van de leegte-functie voor duidelijkheid.
Parameters doorgeven aan functies
We hebben het concept van feitelijke en formele parameters al gezien. We weten ook dat werkelijke parameters waarden doorgeven aan een functie die wordt ontvangen door de formaatparameters. Dit wordt het doorgeven van parameters genoemd.
In C ++ hebben we bepaalde manieren om parameters door te geven, zoals hieronder wordt besproken.
Passeer waarde
In het programma om twee gehele getallen te ruilen dat we eerder bespraken, hebben we gezien dat we gewoon de gehele getallen ‘a’ en ‘b’ in het hoofdgedeelte hebben gelezen en deze hebben doorgegeven aan de ruilfunctie. Dit is de pass by value-techniek.
In pass-by-waarde techniek van het doorgeven van parameters, worden de kopieën van waarden van feitelijke parameters doorgegeven aan de formele parameters. Hierdoor worden de actuele en formele parameters op verschillende geheugenlocaties opgeslagen. Wijzigingen in formele parameters binnen de functie worden dus niet buiten de functie weerspiegeld.
We kunnen dit beter begrijpen door nogmaals het ruilen van twee nummers te bezoeken.
Uitgang:
Voer de twee nummers in die u wilt wisselen: 3 2
a = 3 b = 2
Na ruilen binnen Swap:
a = 2 b = 3
Na het wisselen in Main:
a = 3 b = 2
We hebben eenvoudigweg het eerdere programma gewijzigd om de waarden van formele parameters en werkelijke parameters voor en na de functieaanroep af te drukken.
Zoals blijkt uit de uitvoer, geven we aanvankelijk de waarden a = 3 en b = 2 door. Dit zijn de feitelijke parameters. Na het omwisselen in de swap-functie zien we dat de waarden daadwerkelijk worden omgewisseld en a = 2 en b = 3.
Echter, na de functieaanroep om te wisselen, in de hoofdfunctie, zijn de waarden van a en b nog steeds respectievelijk 3 en 2. Dit komt doordat de feitelijke parameters zijn doorgegeven aan de functie waar het een kopie van de variabelen heeft. Dus hoewel de formele parameters werden uitgewisseld in de ruilfunctie, werden ze niet terug gereflecteerd.
Hoewel Pass by value-techniek de meest basale en meest gebruikte is, kunnen we deze vanwege de bovenstaande beperking alleen gebruiken in de gevallen waarin we de functie niet nodig hebben om waarden te wijzigen bij het aanroepen van de functie.
Passeer Referentie
Pass by reference is nog een andere techniek die door C ++ wordt gebruikt om parameters door te geven aan functies. Bij deze techniek geven we geen kopieën van werkelijke parameters door, maar verwijzingen naar werkelijke parameters.
Notitie: Verwijzingen zijn niets anders dan aliassen van variabelen of in eenvoudige bewoordingen, het is een andere naam die aan een variabele wordt gegeven. Daarom delen een variabele en zijn referentie dezelfde geheugenlocatie. We zullen referenties in detail leren in onze volgende tutorial.
c ++ willekeurig getal tussen 1 en 10
In pass-by-referentietechniek gebruiken we deze referenties van werkelijke parameters en als resultaat worden de wijzigingen die in formele parameters in de functie zijn aangebracht, teruggevoerd naar de aanroepende functie.
We passen onze ruilfunctie aan zodat onze lezers het concept beter begrijpen.
Uitgang:
Voer de twee nummers in die u wilt wisselen: 25 50
a = 25 b = 50
Na het wisselen in Main:
a = 50 b = 25
Opmerking: de pass-by-referentietechniek die in het bovenstaande voorbeeld wordt getoond. We kunnen zien dat de feitelijke parameters worden doorgegeven zoals ze zijn. Maar we voegen een ‘&’ -teken toe aan de formele parameters om aan te geven dat het een referentie is die we gebruiken voor deze specifieke parameter.
Vandaar dat de wijzigingen die zijn aangebracht in de formele parameters in de swap-functie weerspiegelen in de hoofdfunctie en we krijgen de verwisselde waarden.
Ga voorbij Pointer
In C ++ kunnen we ook parameters doorgeven om te functioneren met behulp van pointervariabelen. De pass-by-pointer-techniek levert dezelfde resultaten op als die van pass-by-referentie. Dit betekent dat zowel formele als feitelijke parameters dezelfde geheugenlocaties delen en dat de wijzigingen in de functie worden weerspiegeld in de aanroepende functie.
Het enige verschil is dat we bij pass by reference te maken hebben met referenties of aliassen van parameters, terwijl we bij pass by pointer-techniek pointervariabelen gebruiken om de parameters door te geven.
Pointervariabelen verschillen met de verwijzingen waarin pointervariabelen naar een bepaalde variabele verwijzen en in tegenstelling tot verwijzingen kunnen we de variabele waarnaar deze verwijst, wijzigen. We zullen de details van de aanwijzer onderzoeken in onze volgende tutorials.
We presenteren het verwisselen van twee gehele getallen opnieuw om de Pass by Pointer-techniek te demonstreren.
Uitgang:
hoe dat bestand op Windows te openen
Voer de twee nummers in die u wilt wisselen: 23 54
a = 23 b = 54
Na het wisselen in Main:
a = 54 b = 23
Zoals gezegd is er dus geen verschil in de output van het programma. Het enige verschil zit in de manier waarop de parameters worden doorgegeven. We kunnen opmerken dat formele parameters hier pointervariabelen zijn.
Standaardparameters
In C ++ kunnen we standaardwaarden voor functieparameters opgeven. In dit geval, wanneer we de functie aanroepen, specificeren we geen parameters. In plaats daarvan neemt de functie de standaardparameters aan die in het prototype zijn opgegeven.
Het volgende voorbeeld toont het gebruik van standaardparameters.
Uitgang:
Voer waarden in voor a, b en c: 10 4 6
Roep de wiskundige bewerking aan met 1 arg: 15
Roep de wiskundige bewerking aan met 2 arg: 20
Roep de wiskundige bewerking aan met 3 arg: 6
Zoals in het codevoorbeeld wordt getoond, hebben we een functie ‘mathoperation’ die drie parameters haalt, waaruit we standaardwaarden voor twee parameters hebben opgegeven. In de hoofdfunctie noemen we deze functie drie keer met een andere argumentenlijst.
De eerste aanroep is met slechts één argument. In dit geval hebben de andere twee argumenten standaardwaarden. De volgende aanroep is met twee argumenten. In dit geval heeft het derde argument een standaardwaarde. De derde oproep is met drie argumenten. In dit geval, aangezien we alle drie de argumenten hebben opgegeven, worden standaardwaarden genegeerd.
Merk op dat hoewel we standaardparameters opgeven, we altijd beginnen met de meest rechtse parameter. We kunnen ook geen parameter ertussen overslaan en een standaardwaarde opgeven voor de volgende parameter.
Laten we nu verder gaan met een paar speciale functie-gerelateerde concepten die belangrijk zijn vanuit het standpunt van een programmeur.
Const Parameters
We kunnen ook constante parameters doorgeven aan functies met het trefwoord ‘const’. Als een parameter of verwijzing const is, kan deze niet binnen de functie worden gewijzigd.
Merk op dat we een const-parameter niet kunnen doorgeven aan een niet-const formele parameter. Maar we kunnen const en niet-const parameter doorgeven aan een const formele parameter.
Evenzo kunnen we ook const return-type hebben. Ook in dit geval kan het retourtype niet worden gewijzigd.
Laten we een codevoorbeeld bekijken dat const-verwijzingen gebruikt.
Uitgang:
Voer de twee nummers in die u wilt wisselen: 22 33
a = 2 b = 33
Resultaat bijtelling: 55
In het bovenstaande programma hebben we const-formele parameters. Merk op dat de feitelijke parameters gewone niet-const variabelen zijn die we met succes hebben doorstaan. Aangezien formele parameters const zijn, kunnen we ze niet wijzigen binnen de functie. We voeren dus gewoon de optelbewerking uit en retourneren de waarde.
Als we proberen de waarden van a of b in de functie te wijzigen, geeft de compiler een foutmelding.
Inline-functies
We weten dat om een functieaanroep te doen, het intern een compiler inhoudt die de staat van het programma op een stapel opslaat voordat de besturing aan de functie wordt doorgegeven.
Als de functie terugkeert, moet de compiler de programmastatus terughalen en doorgaan waar hij gebleven was. Dit vormt een overhead. Daarom is er in C ++ telkens wanneer we een functie hebben die uit weinig instructies bestaat, een faciliteit waarmee deze inline kan worden uitgebreid. Dit doe je door een functie inline te maken.
Inline-functies zijn dus de functies die tijdens runtime worden uitgebreid, waardoor de inspanningen om de functie aan te roepen en de stapelwijzigingen worden bespaard, worden bespaard. Maar zelfs als we een functie als inline maken, kan de compiler niet garanderen dat deze tijdens runtime zal worden uitgebreid. Met andere woorden, het is volledig afhankelijk van de compiler om de functie al dan niet inline te maken.
Sommige compilers detecteren kleinere functies en breiden ze inline uit, zelfs als ze niet inline worden gedeclareerd.
Hieronder volgt een voorbeeld van een inline-functie.
Zoals hierboven getoond, gaan we de functiedefinitie vooraf met een trefwoord 'inline' om een functie inline te maken.
Structs gebruiken in functies
We kunnen structuurvariabelen als parameters doorgeven om op een vergelijkbare manier te functioneren waarop we gewone variabelen als parameters doorgeven.
Dit wordt getoond in het volgende voorbeeld.
Uitgang:
Voer naam in: Vedang
Leeftijd invoeren: 22
Vul salaris in: 45.000,00
PersonInfo-structuur:
Leeftijd: 22
Naam: Vedang
Salaris: 45000
Zoals getoond in het bovenstaande programma, geven we een structuur door om op een vergelijkbare manier te functioneren als andere variabelen. We lezen waarden voor structuurelementen uit de standaardinvoer en geven vervolgens een structuur door aan een functie die de structuur weergeeft.
Gevolgtrekking
Dit ging allemaal over de basisprincipes van functies in C ++.
We zullen meer onderzoeken over de statische functies in C ++ in onze aanstaande tutorials.
Bekijk hier de complete C ++ GRATIS trainingsreeks.
Aanbevolen literatuur
- Python-functies
- Datum- en tijdfuncties in C ++ met voorbeelden
- Unix Shell-scriptfuncties met parameters en Return
- Python DateTime-zelfstudie met voorbeelden
- Belangrijke LoadRunner-functies die worden gebruikt in VuGen-scripts met voorbeelden
- Python String-functies
- Python Main Function-zelfstudie met praktische voorbeelden
- Vriendfuncties in C ++