Was passiert da?/variablen
-
also ich bin, wie man sieht, ein anfänger.
ich lerne mit dem buch "c++ in 21 tagen" und bin jetzt beim 3. tag...
also meine frage: in der funktion "Add" werden ja 2 integer-werte erstellt (x,y). weiter unten im code wird dann die variable "c" als die funktion "Add" definiert, aber in der klammer steht nicht "Add(x,y)" sondern "Add(a,b)", warum das? wird dadurch einfach "a" als "x" und "b" als "y" definiert? wenns so ist, warum macht man dann nicht der einfachheitshalber "int x, y, c;"?#include <iostream> using namespace std; int Add (int x, int y) { cout << "In Add(), erhalten " << x << " und " << y << "\n"; return (x+y); 7: } int main() { cout << "Ich bin in main()!\n"; int a, b, c; cout << "Geben Sie zwei Zahlen ein: "; cin >> a; cin >> b; cout << "\nAufruf von Add()\n"; c = Add(a,b); cout << "\nZurueck in main().\n"; cout << "c wurde gesetzt auf " << c; cout << "\nBeenden...\n\n"; return 0; 22: }
und wo im code müsste ich diese variablen einfügen, damits korrekt ist: "unsigned int meineGroesse, meinGewicht, meineSchuhgroesse;"?
z.b. so:"int testFunction(unsigned int meineGroesse, meinGewicht, meineSchuhgroesse = 42) { cout << "wie gross bist du?\n"; cin >> meineGroese; ...... }
?
kann mir echt jemand ein korrektes bsp. machen, bitte?und was ist der unterschied zwischen einer variablen die ich in der klammer einer funktion z.b. so:
int Add (int x, int y) { }
erstelle und einer variablen, die ich innerhalb der geschweiften klammern erstelle?, etwa so:
int main () { unsigned short Breite; unsigned short Laenge; unsigned short Flaeche; Flaeche = Breite * Laenge; return 0;} )
sorry dass ich euch löcher in den bauch frage, aber wenn ich cpp und OOP lernen will, dann schon richtig
gruss titeuf/edit: Bitte Code Tags verwenden
-
weiter unten im code wird dann die variable "c" als die funktion "Add" definiert
Also die Variable c wird nicht als die funktion add definiert sondern, das was Add zurückgibt wird c zugewiesen.
aber in der klammer steht nicht "Add(x,y)" sondern "Add(a,b)", warum das? wird dadurch einfach "a" als "x" und "b" als "y" definiert? wenns so ist, warum macht man dann nicht der einfachheitshalber "int x, y, c;"?
Du hast anscheinend den Sinn von Funktionen noch nicht ganz verstanden, der Sinn einer Funktion ist es eine Algorithmus an mehreren Stellen zu verwenden.
int Add (int x, int y)
hier definiert das 1. "int" den Rückgabewert (was für eine Art von Variable durch return zurückgegeben wird (hier eine int-Variable)).
"Add" ist der Funktionsname mit dem man die Funktion aufrufen kann.
"int x, int y" Definiert 2 Variablen die beim Aufrufen der Funktion übergeben werden müssen, d. h. die Funktion Add braucht 2 Werte mit denen sie rechnen kann und diese müssen ihr beim Aufruf übergeben werden.{ cout << "In Add(), erhalten " << x << " und " << y << "\n"; return (x+y); 7: }
Hier wird dann mit x und y gerechnet und anschliesend zurückgegeben.
und wo im code müsste ich diese variablen einfügen, damits korrekt ist: "unsigned int meineGroesse, meinGewicht, meineSchuhgroesse;"?
Bsp:
int testFunction() { unsigned int meineGroesse, meinGewicht, meineSchuhgroesse = 42; cout << "wie gross bist du?\n"; cin >> meineGroese; ...... }
-
erstmal sorry wegen codetags, hab ich nicht geschnallt.....aber ich versuchs hier mal.
Erstmal ein dickes *Dankeschön* @Wolle, hast mir wirklich weitergeholfen, va. was den Sinn von Funktionen betrifft.(hab gar nicht soweit gedacht...)aber ein paar Questions hab ich noch...
also in diesem abschnitt da:int Add (int x, int y)
schreibe ich ja 2x "int", könnte ich das nicht so abkürzen:
int Add (int x, y)
?
und ists möglich, hier z.b. das da zu machen?int Add (int x, int y = 5)
und noch was ist für mich nicht ganz klar.... also im oberen Bsp. werden ja in der klammer von
int Add ()
die beiden integer x und y erzeugt, und unten wird das ganze in der Funktion drin erzeugt...
int testFunction() { unsigned int meineGroesse, meinGewicht, meineSchuhgroesse = 42; cout << "wie gross bist du?\n"; cin >> meineGroese; ...... }
heisst das, dass die untere Funktion nichts zurückgibt nur die Obere? Oder warum ist das so?
und noch was zum Schluss:
Also die Variable c wird nicht als die funktion add definiert sondern, das was Add zurückgibt wird c zugewiesen.
also ist c = das was "return()" zurückgibt? D.h. die eigentliche Funktion (Eingabe der werte, Stringausgabe) wird nicht aufgerufen, sondern nur ihr Wert?
so hoffe ihr habt noch genügend nerven, einem totalen beginner (der das ganze freiwillig lernen will) zu helfen.
mfg titeuf
-
Hm... ich glaub du hast es immer noch nicht so richtig geschnallt
Der Kopf der FUnktion
int Add(int X, int y) { return (x + y); }
besagt, heir beginnt die Funktion Add. Sie verlenagt 2 Argumente, zweimal ein int wert und gibt einen Int-wert zurück. Wenn du diese Funtion jetzt aufrufst:
int c; c = Add(4, 2);
Dann werden für die Funktion erstmal 2 int-Variablen "erstellt". In die erste wird der Wert 4 kopiert(x) und in die zweite wird 2 kopiert(y). Dann wird das ausgerechnet:
(x+y); // und der Wert wird dann zurückgegeben: return (x+y);
Dieser Wert wird dann der Variablen c zugewiesen, mit der du dann was anfangen kannst.
Stell dir eine Funktion einfach als ein selbständiges Programm vor, dem du ber die Parameter (also zB int x, int y) sagst, wie es sich verhalten soll. Wenn das Programm fertig ist, dann macht es dir eine Ausgabe, zB in Form eines zurückgegebenen Wertes.Die Funktion int main() ist auch nur eine Funktion. In ihr wird auch etwas verarbeitet und dann (manchmal) auch eine Ausgabe gemacht. Mit return 0; am Ende von main teilt man dem Betriebssystem zB mit, dass das Programm ohne Fehler gelaufen ist.
Der Unterschied von im Kopf und im Rumpf von Funktionen "erstellten" Variablen besteht lediglich darin, dass denen Im Kopf immer ein Wert zugewiesen werden muss.Hoffe, ich konnte helfen
Maxi
-
titeuf schrieb:
erstmal sorry wegen codetags, hab ich nicht geschnallt.....aber ich versuchs hier mal.
das mit den code-tags ist nicht so schlimm
int Add (int x, int y)
schreibe ich ja 2x "int", könnte ich das nicht so abkürzen:
int Add (int x, y)
?
nein, das geht per definition nicht.
und ists möglich, hier z.b. das da zu machen?
int Add (int x, int y = 5)
das ist möglich. (siehe unten)
und noch was ist für mich nicht ganz klar.... also im oberen Bsp. werden ja in der klammer von [cpp] int Add ()
die beiden integer x und y erzeugt, und unten wird das ganze in der Funktion drin erzeugt...
die integer in den klammern bekommen kopien der werte, die du der funktion bei einem aufruf übergibst:
int foo () { return 42; } int bar (int x) { return 10; } //jetzt rufen wir die funktionen auf: foo(); //foo braucht keine argumente, deshalb die leeren klammern bar(18); //bar braucht ein argument, das ist jetzt 18. bar rechnet //also mit x = 18 //und wenn wir das, was die funktionen zurückgeben, brauchen: int von_foo_rueckgegeben = foo(); //hier rufen wir foo auf und weisen der variable //"von_foo_rueckgegeben" den wert zu, den foo zurückgibt. int eine_andere_variable = foo() - 10; //foo wird aufgerufen; vom wert, den foo zurückgibt, //ziehen wir 10 ab und weisen das ergebnis an die variable //"eine_andere_variable" int y = bar(foo()); //hier rufen wir foo auf, und rufen bar mit dem wert auf, den foo zurückgibt. bar(y); //hier rufen wir bar mit dem wert der variable y auf ... baz (int x, int y = 10, int z = 20) { return x+y+z; } //wir definieren eine funktion baz, die maximal drei, mindestens jedoch ein argument //benötigt. falls wir baz mit 3 argumenten aufrufen, dann hat x den //wert des ersten arguments, y den wert des 2. und z den wert des 3. //rufen wir baz mit 2 ints auf, dann hat x den //wert des ersten, y den wert des 2. und z den default wert, also 20 //rufen wir baz mit 1 int auf, bekommt x dessen wert, //y erhält den default wert 10 und z wird 20. baz(1,2,3); //baz gibt 6 zurück (1--> x, 2--> y, 3--> z baz(1,2); //baz gibt 23 zurück (1--> x, 2--> y, default wert 20--> z baz(1); //baz gibt 31 zurück (1--> x, default 10 --> y, default 20 --> z baz(); //geht nicht, die funktion erwartet mindestens ein int als argument baz(baz(1,1,1), 2, 3); //baz gibt 8 zurück: //zuerst wird baz in den klammern aufgerufen, mit 1, 1, 1 (1+1+1 = 3) //dann wird baz (das äußere) mit 3 (wegen 1+1+1), 2 und 3 aufgerufen.
hoffe, das ist verständlich
int testFunction() { unsigned int meineGroesse, meinGewicht, meineSchuhgroesse = 42; cout << "wie gross bist du?\n"; cin >> meineGroese; ...... }
heisst das, dass die untere Funktion nichts zurückgibt nur die Obere? Oder warum ist das so?
die funktion muss auch etwas zurückgeben (ein int), nur hat der, der das geschrieben hat, ....... am ende stehen, was soviel heißt wie "denk dir die funktion selbst weiter". das ist pseudo-code.
und noch was zum Schluss:
Also die Variable c wird nicht als die funktion add definiert sondern, das was Add zurückgibt wird c zugewiesen.
also ist c = das was "return()" zurückgibt? D.h. die eigentliche Funktion (Eingabe der werte, Stringausgabe) wird nicht aufgerufen, sondern nur ihr Wert?
die funktion wird aufgerufen, und der wert, den sie zurückgibt wird für die zuweisung verwendet.
alles klar?
-
boah ey, das ging aber schnell!
hey, vielen dank an alle hier! Super Board, super Leute, supergeil dass ihr auch nach 1000x mal die Fragen der Anfänger noch beantwortet!
Merci,
titeuf