Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina25/49
Datum25.10.2017
Grootte5.04 Mb.

Dovnload 5.04 Mb.
1   ...   21   22   23   24   25   26   27   28   ...   49

Referencing

Onderstaande functie zal niet werken:


#include
void Verwissel(String a, String b)

{

const String temp = a;

a = b;

b = temp;



}
void MijnFunctie()

{

String s1 = "s1";



String s2 = "s2";

Verwissel(s1,s2);

assert(s1 == "s1"); //Hee, niet veranderd!

assert(s2 == "s2"); //Hee, niet veranderd!

}
Wat ook niet de bedoeling is: als we s1 en s2 const maken, komt er geen waarschuwing!
De reden hiervoor is, dat als we iets doorgeven aan een functie, dat dit in eerste instantie een kopie is: achter de schermen om wordt het origineel gekopieerd en aan de functie gegeven. Wat de functie er vervolgens mee doet, dat maakt voor het origineel niet uit. Daarom kan in bovenstaand voorbeeld s1 en s2 const zijn.
Referencing zorgt ervoor dat er met de originelen gewerkt kan worden:
#include
void Verwissel(String& a, String& b)

{

const String temp = a;

a = b;

b = temp;



}
void MijnFunctie()

{

String s1 = "s1";



String s2 = "s2";

Verwissel(s1,s2);

assert(s1 == "s2");

assert(s2 == "s1");



}
Het &-teken, ook wel ampersand genoemd, zorgt ervoor dat er niet met een kopie, maar met het origineel gewerkt wordt.




De functie Verwissel (in het Engels 'Swap') is vaak de functie die als eerste voorbeeld in generiek (met template) programmeren wordt laten zien.

Maken we de String s1 const, dan komt de volgende waarschuwig:


[C++ Warning] Unit1.cpp(23): W8030 Temporary used for parameter 'a' in call to 'Verwissel(AnsiString &,AnsiString &)'
Dit betekent dat de compiler een tijdelijke kopie van s1 heeft gemaakt en deze kopie met de originele s2 heeft omgewisseld. s1 blijft dus ongewijzigd.
1   ...   21   22   23   24   25   26   27   28   ...   49


Dovnload 5.04 Mb.