C++ Funktioner med programexempel

โšก Smart sammanfattning

Fungerar i C++ grupperar relaterade satser i รฅteranvรคndbara namngivna block som tar emot indata, bearbetar den och returnerar utdata. Program kombinerar inbyggda biblioteksfunktioner och anvรคndardefinierade funktioner, dรคr var och en deklareras, definieras och anropas fรถr att undvika att koden upprepas.

  • ๐Ÿงฉ Vad det รคr: En funktion grupperar satser som tar parametrar, bearbetar dem och returnerar ett vรคrde, och kรถr en gemensam uppgift frรฅn ett block.
  • ๐Ÿ“š Inbyggda funktioner: Ocuco-landskapet C++ Standardbiblioteket levererar fรคrdiga funktioner som sqrt() som du anropar direkt utan att skriva dem.
  • ๐Ÿ› ๏ธ Anvรคndardefinierade funktioner: Programmerare skapar sina egna funktioner, namnger dem unikt och anropar den koden var som helst i programmet.
  • ๐Ÿ“ Fรถrklaring och definition: En prototyp deklarerar returtyp, namn och argumenttyper; definitionen tillhandahรฅller funktionstexten.
  • ๐Ÿ“ž Samtal och argument: Nรคr en funktion anropas kรถrs dess brรถdtext; argument mรฅste matcha parametrar i antal och typ, och standardvรคrden รคr tillรฅtna.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot och liknande assistenter scaffold C++ funktionssignaturer, brรถdtexter och anrop frรฅn en kort kommentar.

C++ Funktioner

Vad รคr en funktion i C++?

En funktion i C++ hรคnvisar till en grupp av pรฅstรฅenden som tar input, bearbetar den och returnerar en utdata. Tanken bakom en funktion รคr att kombinera vanliga uppgifter som gรถrs upprepade gรฅnger. Om du har olika ingรฅngar kommer du inte att skriva samma kod igen. Du kommer helt enkelt att anropa funktionen med en annan uppsรคttning data som kallas parametrar.

Varje C++ programmet har minst en funktion, main()-funktionen. Du kan dela upp din kod i olika funktioner. Denna indelning bรถr vara sรฅdan att varje funktion gรถr en specifik uppgift.

Det finns mรฅnga inbyggda funktioner i C++ standardbibliotek. Du kan anropa dessa funktioner i ditt program.

Varfรถr anvรคnda funktioner?

Det finns mรฅnga fรถrdelar fรถrknippade med anvรคndningen av funktioner. Dessa inkluderar:

  • Varje funktion sรคtter ihop relaterad kod. Detta gรถr det lรคttare fรถr programmerare att fรถrstรฅ kod.
  • Funktioner gรถr programmering enklare genom att eliminera kodupprepning.
  • Funktioner underlรคttar kodรฅteranvรคndning. Du kan anropa samma funktion fรถr att utfรถra en uppgift i olika delar av programmet eller till och med utanfรถr programmet.

Inbyggda funktioner

In C++, biblioteksfunktioner รคr inbyggda C++ funktioner. Fรถr att anvรคnda dessa funktioner, anropar/ringar du dem helt enkelt direkt. Du behรถver inte skriva funktionerna sjรคlv.

Exempel 1:

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	double num, squareRoot;
	cout << "Enter number: ";
	cin >> num;
	squareRoot = sqrt(num);
	cout << "The square root of " << num << " is: " << squareRoot;
	return 0;
}

Produktion:

Utgรฅng av C++ exempel pรฅ inbyggd sqrt()-funktion

Hรคr รคr en skรคrmdump av koden:

C++ kod som anropar den inbyggda sqrt()-funktionen frรฅn cmath

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅrt program fรถr att anvรคnda dess funktioner.
  2. Inkludera cmath-biblioteket fรถr att anvรคnda dess funktioner. Vi vill anvรคnda funktionen sqrt() definierad i den.
  3. Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
  4. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
  5. Deklarera tvรฅ dubbla variabler, num och kvadratrot.
  6. Skriv ut lite text pรฅ konsolen. Texten ber anvรคndaren att ange ett nummer.
  7. Lรคs anvรคndarinmatning frรฅn tangentbordet. Ingรฅngen blir vรคrdet fรถr variabel num.
  8. Anropa biblioteksfunktionen sqrt(), som berรคknar kvadratroten ur ett tal. Vi skickade parametern num till funktionen, vilket betyder att den kommer att berรคkna kvadratroten av num. Denna funktion รคr definierad i cmath-biblioteket.
  9. Skriv ut numret som angetts av anvรคndaren, dess kvadratrot och lite annan text pรฅ konsolen.
  10. Programmet mรฅste returnera vรคrde efter framgรฅngsrikt slutfรถrande.
  11. Slutet pรฅ huvuddelen av funktionen main().

Anvรคndardefinierade funktioner

C++ lรฅter programmerare definiera sina egna funktioner. Syftet med funktionen รคr att gruppera relaterad kod. Koden fรฅr sedan en unik identifierare, funktionsnamnet.

Funktionen kan anropas/anropas frรฅn vilken annan del av programmet som helst. Den kommer sedan att exekvera koden som definierats i dess kropp.

Exempel 2:

#include <iostream>
using namespace std;

void sayHello() {
	cout << "Hello!";
}

int main() {

	sayHello();

	return 0;
}

Produktion:

Utgรฅng av C++ anvรคndardefinierad sayHello()-funktion

Hรคr รคr en skรคrmdump av koden:

C++ kod som definierar och anropar en anvรคndardefinierad funktion

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅrt program fรถr att anvรคnda dess funktioner.
  2. Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
  3. Skapa en anvรคndardefinierad funktion som heter sayHello().
  4. Skriv ut lite text pรฅ konsolen nรคr funktionen sayHello() anropas.
  5. Slutet pรฅ brรถdtexten fรถr sayHello()-funktionen.
  6. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
  7. Anropa/anropa funktionen som heter sayHello().
  8. Programmet mรฅste returnera vรคrde efter framgรฅngsrikt slutfรถrande.
  9. Slutet pรฅ huvuddelen av funktionen main().

Kompilatorn mรฅste kรคnna till en funktion innan den anvรคnds.

Funktionsdeklaration/Prototyp

Om du definierar en anvรคndardefinierad funktion efter main()-funktionen, C++ kompilator kommer att returnera ett fel. Anledningen รคr att kompilatorn inte kรคnner till detaljerna fรถr den anvรคndardefinierade funktionen. Detaljerna inkluderar dess namn, typerna av argument och deras returtyper.

In C++, deklarerar funktionsdeklarationen/prototypen en funktion utan kropp. Detta ger kompilatorn information om den anvรคndardefinierade funktionen.

I deklarationen/prototypen inkluderar vi returtypen, funktionsnamnet och argumenttyper. Namnen pรฅ argumenten lรคggs inte till. Men att lรคgga till argumentnamnen genererar inget fel.

C++ funktionsdeklaration/prototypsyntaxdiagram

Funktionsdefinition

Syftet med funktionsdeklarationen รคr att berรคtta C++ kompilator om funktionsnamn, returtyp och parametrar. En funktionsdefinition talar om fรถr C++ kompilator om funktionskroppen.

C++ funktionsdefinitionsstrukturdiagram

syntax

return_datatype function_name( parameters) {
   function body 
}

Frรฅn ovanstรฅende har en funktionsdefinition funktionshuvudet och kroppen. Hรคr รคr en fรถrklaring av parametrarna:

  • return_datatype โ€“ Vissa funktioner returnerar vรคrde. Denna parameter anger datatypen fรถr returvรคrdet. Vissa funktioner returnerar inte vรคrde. I sรฅ fall blir vรคrdet fรถr denna parameter ogiltigt.
  • funktionsnamn- Detta รคr namnet pรฅ funktionen. Funktionens namn och parametrar bildar funktionssignaturen.
  • Parametrar โ€“ Detta รคr typen, ordningen och antalet funktionsparametrar. Vissa funktioner saknar parametrar.
  • function body-detta รคr uttalanden som definierar vad funktionen ska gรถra.

Funktionsanrop

Fรถr att en funktion ska utfรถra den angivna uppgiften och returnera utdata mรฅste den anropas. Nรคr du anropar en funktion kรถr den de pรฅstรฅenden som lagts till i dess kropp.

En funktion anropas med sitt namn. Om funktionen tar emot parametrar ska deras vรคrden skickas under anropet. Om funktionen inte tar emot nรฅgra parametrar ska inget vรคrde skickas under anropet.

C++ funktionsanropssyntaxdiagram

Passande argument

In C++, ett argument/parameter รคr den data som skickas till en funktion under dess anrop. Vรคrdena mรฅste initieras till sina respektive variabler.

Nรคr man anropar en funktion mรฅste argumenten matcha i antal. Det betyder att de vรคrden du skickar mรฅste vara lika med antalet parametrar. ร…terigen mรฅste vรคrdena ocksรฅ matcha parametrarna vad gรคller typ. Om den fรถrsta parametern รคr ett heltal mรฅste vรคrdet som skickas till den vara ett heltal.

Man kan tilldela standardvรคrden till funktionsparametrar. Om du inte anger ett vรคrde fรถr parametern under funktionsanropet kommer standardvรคrdet att anvรคndas.

Exempel 3: Hur man skriver och anropar en funktion

#include <iostream>
using namespace std;
int addFunc(int, int);
int main() {
	int x, y, sum;
	cout << "Enter two numbers: ";
	cin >> x >> y;
	sum = addFunc(x, y);
	cout <<"The sum of "<<x<< " and " <<y<<" is: "<<sum;
	return 0;
}
int addFunc(int num1, int num2) {
	int addFunc;
	addFunc = num1 + num2;
	return addFunc;
}

Produktion:

Utgรฅng av C++ addFunc()-funktionen returnerar en summa

Hรคr รคr en skรคrmdump av koden:

C++ kod som skickar argument till addFunc()-funktionen

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅrt program fรถr att anvรคnda dess funktioner.
  2. Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
  3. Deklarera en funktion som heter addFunc() som tar tvรฅ heltalsparametrar. Detta skapar funktionsprototypen.
  4. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
  5. Deklarera tre heltalsvariabler, x, y och summa.
  6. Skriv ut lite text pรฅ konsolen. Texten ber anvรคndaren att ange tvรฅ siffror.
  7. Lรคs anvรคndarinmatningen frรฅn tangentbordet. Anvรคndaren ska ange tvรฅ siffror fรถr variablerna x och y, separerade med mellanslag.
  8. Anropa funktionen addFunc() och skicka parametrarna x och y till den. Funktionen kommer att arbeta pรฅ dessa parametrar och tilldelar utgรฅngen till variabelsumman.
  9. Skriv ut vรคrdena fรถr variablerna x, y och summa pรฅ konsolen tillsammans med annan text.
  10. Funktionen mรฅste returnera vรคrde efter framgรฅngsrikt slutfรถrande.
  11. Slutet pรฅ huvuddelen av funktionen main().
  12. Funktionsdefinition. Vi definierar funktionen addFunc(). Vi kommer att ange vad funktionen kommer att gรถra i sin kropp, { }.
  13. Deklarera en heltalsvariabel med namnet addFunc.
  14. Lรคgga till vรคrdena fรถr parametrarna num1 och num2 och tilldela resultatet till variabeln addFunc.
  15. Funktionen addFunc() bรถr returnera vรคrdet fรถr variabeln addFunc.
  16. Slutet pรฅ funktionskroppen, det vill sรคga funktionsdefinition.

Vanliga frรฅgor

Call by value kopierar argumentet, sรฅ รคndringar i funktionen pรฅverkar inte originalet. Call by reference skickar variabeln med ett et-tecken, vilket gรถr att funktionen kan รคndra anroparens vรคrde direkt. C++ standardinstรคllningen รคr att anropa efter vรคrde.

Funktionsรถverbelastning gรถr att flera funktioner delar ett namn men skiljer sig รฅt i antal eller typ av parametrar. Kompilatorn vรคljer rรคtt version frรฅn de argument du skickar, vilket fรถrbรคttrar lรคsbarheten fรถr relaterade operationer.

En inline-funktion ber kompilatorn att infoga sin brรถdtext vid varje anropsplats istรคllet fรถr att gรถra ett vanligt anrop. Detta kan minska kostnaden fรถr smรฅ funktioner, รคven om kompilatorn kan ignorera ledtrรฅden.

En rekursiv funktion anropar sig sjรคlv och delar upp ett problem i mindre delproblem. Den behรถver ett basfall som stoppar rekursionen; annars upprepas anropen fรถr evigt och stacken รถverflรถdar. Faktorial รคr ett klassiskt exempel.

Du skickar parametern som en pekare eller en array med en stรถrre storlek och skickar vanligtvis dess lรคngd separat, eftersom arrayen avklingar till en pekare. Se skicka arrayer i C++ funktioner fรถr fullstรคndiga bearbetade exempel.

En funktion returnerar ett vรคrde direkt, men du kan returnera flera med hjรคlp av referensparametrar fรถr utdata, en struct, ett std::pair, en std::tuple eller en std::vector. Strukturerade bindningar packar sedan upp den returnerade tupeln vid anropsplatsen.

Ja. AI-kodningsassistenter fรถrvandlar en kommentar i ett enkelt sprรฅk till en komplett C++ funktion, vilket fรถreslรฅr signatur, brรถdtext och returtyp. De omstrukturerar รคven lรฅnga funktioner, men du bรถr granska den genererade logiken.

GitHub Copilot autoslutfรถranden C++ funktionsdefinitioner, prototyper och anrop frรฅn dina kommentarer eller namn, fรถreslรฅr รถverbelastningar och utarbetar enhetstester. Den anvรคnder refererade rubriker fรถr kontext, men varje fรถrslag behรถver fortfarande granskas.

Sammanfatta detta inlรคgg med: