Der Unterschied zwischen Funktionsargumenten und Parametern in C++
In diesem Artikel werden die Unterschiede zwischen Funktionsargumenten und Parametern in C++ erläutert.
Die Anatomie von Funktionen in C++
Funktionen sind der gemeinsame Baustein jedes relativ ausgeklügelten Programms. Sie ermöglichen es, die wiederkehrenden Routinen im Programm als separate Blöcke zu definieren und sie dann aufzurufen, wenn der entsprechende Code ausgeführt werden muss. Die Aufteilung eines Programms in mehrere Funktionen macht das Programm modularer und einfacher zu warten und zu verstehen. Folglich sind diese Programme im Allgemeinen einfacher zu testen und zu debuggen.
Die Funktionen haben normalerweise Namen, die sie eindeutig identifizieren; Einige Konzepte wie das Überladen von Funktionen ermöglichen es dem Programmierer jedoch, mehrere Funktionen mit demselben Namen zu definieren; Wir werden diese Funktion in den späteren Absätzen untersuchen. Lambda-Ausdrücke sind ebenfalls in der Mischung enthalten, die eine Möglichkeit bieten, unbenannte Funktionsobjekte zu definieren. Die Summe verschiedener Anweisungen im Funktionsblock wird als Funktionsrumpf bezeichnet. Funktionen haben auch einen Rückgabetyp, der den Typ des an den Aufrufer zurückgegebenen Werts darstellt.
Ein weiterer kritischer Teil der Funktion ist eine Liste von Parametern, die die Variablen bezeichnen, die als Teil der Signatur der Funktion deklariert wurden. Der Aufrufer übergibt normalerweise einige konkrete Werte, um diese Variablen im Funktionsumfang zu initialisieren. Die letzteren Werte werden Argumente genannt, und sie werden als Initialisierer für die Parameter der Funktion bezeichnet. Dennoch können die Begriffe - Parameter und Argumente in einigen Kontexten austauschbar verwendet werden.
Im folgenden Beispielprogramm zeigen wir Ihnen eine Funktion namens - printVector
, die nur einen Parameter (namens vec
) in ihrer Signatur definiert hat. Wenn der Prozess in der Funktion main
aufgerufen wird, wird ihr das Argument vec1
übergeben. Sobald die Ausführung zum Funktionsrumpf printVector
wechselt, wird der Parameter vec
mit dem entsprechenden Wert initialisiert.
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(const vector<T> &vec) {
for (auto &i : vec) {
cout << i << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1{11, 82, 39, 72, 51, 32, 91};
printVector(vec1);
return EXIT_SUCCESS;
}
Ausgabe:
11; 82; 39; 72; 51; 32; 91;
Wie im vorherigen Kapitel erwähnt, unterstützt C++ das Konzept des Funktionsüberladens, das es dem Programmierer ermöglicht, mehrere Funktionen mit demselben Namen zu definieren. Diese Funktionen müssen sich jedoch durch die Anzahl der akzeptierten Argumente oder die Typen der Argumente unterscheiden.
Das folgende Programm unten zeigt die grundlegende Verwendung für überladene Funktionen, die zwei Zahlen vom Typ int
bzw. double
multiplizieren.
#include <iostream>
using std::cout;
using std::endl;
int multiply(int x, int y) { return x * y; }
double multiply(double x, double y) { return x * y; }
int main() {
int i1 = 10;
double d1 = 0.1;
cout << multiply(i1, i1 + 1) << endl;
cout << multiply(d1, d1 + 1) << endl;
return EXIT_SUCCESS;
}
Ausgabe:
110
0.11
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook