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: