Page 1 of 1

[IP] waarde en variabele parameter

Posted: Fri Nov 16, 2012 7:35 pm
by Flipper
Ik begrijp niet wat het verschil is tussen een waarde en variabele parameter. :|

Code: Select all

int tros(int gele_banaan, int& groene_banaan) {
...
}
De eerste is een waarde parameter, de tweede is een variabele parameter, tot zover is het me duidelijk, maar daarna :?:

Ik moet dit begrijpen voordat ik aan de opgave over het maken van een conversie-library kan beginnen. Daar vragen ze immers om minstens 1 conversiefunctie met waarde en variabele parameter te schrijven en ook minstens één conversiefunctie met een return waarde. Vandaar mijn 2e vraagje: is er dan een verschil tussen deze 2 type functies? Ik dacht dat zowat elke functie wel "iets" moet returnen...

Re: [IP] waarde en variabele parameter

Posted: Fri Nov 16, 2012 9:16 pm
by Timmy
Flipper wrote:Ik begrijp niet wat het verschil is tussen een waarde en variabele parameter. :|

Code: Select all

int tros(int gele_banaan, int& groene_banaan) {
...
}
De eerste is een waarde parameter, de tweede is een variabele parameter, tot zover is het me duidelijk, maar daarna :?:

Ik moet dit begrijpen voordat ik aan de opgave over het maken van een conversie-library kan beginnen. Daar vragen ze immers om minstens 1 conversiefunctie met waarde en variabele parameter te schrijven en ook minstens één conversiefunctie met een return waarde. Vandaar mijn 2e vraagje: is er dan een verschil tussen deze 2 type functies? Ik dacht dat zowat elke functie wel "iets" moet returnen...
Stel, u code is als volgt

Code: Select all

 
int tros(int gele_banaan, int& groene_banaan){
gele_banaan = gele_banaan + 2;
groene_banaan = groene_banaan + 2;
}

int gele_banaan = 0;
int groene_banaan = 0;

tros(gele_banaan, groene_banaan);

cout << "Gele: " << gele_banaan << " Groene: " << groene_banaan << endl;
Ge gaat volgende output krijgen:

Code: Select all

Gele: 0 Groene: 2
Bij waarde parameter (dus zonder &) gaat ge enkel de waarde van u variabele meegeven. Dus in u functie gatem een lokale kopie van die variabele maken, die +2 doen, dus dn originele blijft ongewijzigd. Bij u variabele parameter (pass by reference) gaat ge ni de waarde, maar het ADRES van u variabele meegeven. Dus u functie gaat da zien, naar da adres gaan, u variabele ophalen, en daar +2 op doen, waardoor u originele wordt gewijzigd.

Ik suck @ dingen opletten, maar khoop da get snapt? :D

En @ u 2de vraag: een functie moet ni altij iets returnen, in da vorig voorbeeld kan u functie even goe

Code: Select all

void tros(int gele_banaan, int& groene_banaan)
zijn, wa zoveel betekent als "Deze functie geeft niets terug". Het is ook ni verplicht om nen return te zette in een functie die bv nen int zou moeten returnen, buiten wanneer ge bv zegt

Code: Select all

int resultaat = tros(gele_banaan, groene_banaan)
Want dan verwacht ge effectief dat ge een waarde terugkrijgt die ge in u nieuwe variabele stopt.

Re: [IP] waarde en variabele parameter

Posted: Fri Nov 16, 2012 11:57 pm
by Manfr3d
Ben eens curieus wanneer wij da op hogeschool gaan tegenkomen. Ik krijg da dus ni zo maar uitgelegd eh...
Maar Timmy, ik ga u voorbeeld copy-pasta'en en blijven gebruiken!

Re: [IP] waarde en variabele parameter

Posted: Sat Nov 17, 2012 12:37 am
by Flipper
Prachtig, I got it :bow:

Re: [IP] waarde en variabele parameter

Posted: Sat Nov 17, 2012 12:55 am
by Manfr3d
om u tweede vraag nog duidelijker te maken had den Timmy eigelijk in het eerste voorbeeld zijn functie

Code: Select all

void tros(int gele_banaan, int& groene_banaan){
...}
moeten noemen ;-)

Re: [IP] waarde en variabele parameter

Posted: Sun Nov 18, 2012 9:07 pm
by timvdm
Timmy wrote: En @ u 2de vraag: een functie moet ni altij iets returnen, in da vorig voorbeeld kan u functie even goe

Code: Select all

void tros(int gele_banaan, int& groene_banaan)
zijn, wa zoveel betekent als "Deze functie geeft niets terug". Het is ook ni verplicht om nen return te zette in een functie die bv nen int zou moeten returnen, buiten wanneer ge bv zegt

Code: Select all

int resultaat = tros(gele_banaan, groene_banaan)
Want dan verwacht ge effectief dat ge een waarde terugkrijgt die ge in u nieuwe variabele stopt.
Als je een functie definieerd als int, returned ge best wel iets. Anders is het gedrag ongedefinieerd...