Der Code aus dem Bild
#include <iostream>
using namespace std;
int Summe(int, int);
int main()
{
int a,b;
cout<<"Bitte in 2 Zeilen, 2 Zahlen eingeben\n";
cin>>a;
cin>>b;
cout<<"Die Summe von "<<a<<" und "<<b<<" ist "<<Summe(a,b)<<".\n";
}
int Summe(int lhs, int rhs)
{
return lhs + rhs;
}
In Zeile 3 wird erstmal nur bekanntgegeben, dass eine Funktion des Namens Summe existiert.
Korrekt. In C++ muss der Main Methode bekannt sein, dass es die Methode gibt, dafür reicht diese Deklaration aus.
In Z. 10 wird die Funktion des Namens Summe dann aufgerufen. Das (a,b) bedeutet, dass es 2 Variablen (bzw. 2 Parameter) mit dem Namen a und b gibt.
Stimmt, wobei ich es anders beschreiben würde.
Durch die Deklaration in Zeile 3 ist bereits definiert, dass diese Methode zwei Variablen von Datentyp Integer übergeben bekommt. Da du deine Variablen a und b genannt hast (und du keine anderen Nutzt) übergibst du diese Variablen vom Datentyp Integer an die Variable. Genauso gut könnte aber auch Summe(5, 10) eingegeben werden.
In Z. 12 wird dann die Definition der Funktion vorgenommen. Das int lhs, int rhs bedeutet, dass es 2 Parameter mit dem Namen lhs und rhs des Typs integer gibt.
In Z. 15 findet die eigentliche Berechnung statt und wird als ein int zurück an Z. 12 gegeben, welche ihrerseits den Wert an Z.10 ausgibt.
Ehh ....
Ab Zeile 12 wird die Funktion erst wirklich definiert. Davor ist dem Programm bekannt: "Hey hier gibt es eine Funktion namens Summe mit Übergabe von zwei Int-Parametern und der Rückgabeparameter ist ebenfalls ein Integer"
Nach der Main-Methode wird die Methode erstmal Beschrieben und einer Aufgabe zu teil. Bis dahin tut sie einfach nix, außer schön aussehen. ^^
lhs und rhs sind nix anders als Platzhalter wenn man es so will. Sie sind Variablennamen die du jedoch beim "Abarbeiten" der Methode ansprechen kannst. Irgendwie musst du ja sagen können ob du nun die übergebene Variable für die "Magie"- der Funktion benötigst oder ob es egal ist, was eingegeben wird und du einfach sagst: "Egal was ist wer die Methode aufruft bekommt 10 raus".
Es ist alles möglich ^^
Was ich nun nicht verstehe ist, an welcher Stelle und woher der Code weiß, dass er den Wert von a und b auf lhs und rhs legen soll? Ergibt sich das evtl. einfach aus der Reihenfolge und (richtigen) Anzahl der Parameter?
lhs und rhs sind wie erwähnt eine Art Platzhalter, wobei es eigentlich schon oben bei der Deklaration so ist. In der Deklaration sagst du es werden 2 Integer-Werte übergeben.
Bei der Definition der Methode nutzt du Variablen-Namen die an sich nicht relevant sind. Wobei es jedoch für zukünftige Entwicklungen sinnvoll ist immer sinnvolle Variablennamen zu nehmen. Denn spätestens wenn du mit 10 Variablen arbeitest weiß du nicht mehr was a ... j bedeuten.
Also ja du liegst richtig mit der Idee, dass es anhand der Reihenfolge und Anzahl liegt.
Beispiel:
int Summe(double, int, int)
int Summe(doube, int, int)
int a = 2, int b = 4, double c = 3.5
Summe(c, a, b) => Ergibt 9.5
Summe(a,c,b) => Ergibt entweder 9.0 oder aber einen Fehler.
In C++ ist es auch Möglich, dass manche Fehler nicht gemeldet werden, so lange der Compiler damit zurecht kommt. Doch wo liegt der Fehler?
Richtig a ist ein Integer, der erste Übergabeparameter ist aber ein Double. Während die anderen 2 Parameter Integer sind. Das Double würde also in Integer umgewandelt werden, sein Komma verlieren.