Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina19/49
Datum25.10.2017
Grootte5.04 Mb.

Dovnload 5.04 Mb.
1   ...   15   16   17   18   19   20   21   22   ...   49

TStringGrid

Het StringGrid kan gebruikt worden als een 1- of 2-dimensionale tabel van Strings.


Onderstaande code vult alle vakjes van een StringGrid met hun x en y coordinaat.
int maxy = StringGrid1->RowCount;

int maxx = StringGrid1->ColCount;
for (int y=0; y!=maxy; ++y)

{

for (int x=0; x!=maxx; ++x)

{

String s = "(" + IntToStr(x) + "," + IntToStr(y) + ")";



StringGrid1->Cells[x][y] = s;

}

}


Merk het volgende op:

* Inplaats van het aantal rijen en kolommen in de for-loop

te zetten, is gekozen deze eerst maxx en maxy te noemen.

Dit hoeft niet.

* Een bepaald vakje wordt met de blokhaken geselecteerd. De

blokhaken worden dan ook wel de index-operator genoemd.

Omdat een StringGrid 2-dimensionaal is, moet er met twee

paar blokhaken worden gewerkt.

* Het eerste vakje heeft index nul. C en C++ beginnen te

tellen bij nul.

* De for-loop loopt van nul tot het aantal kolommen/rijen.

Als het aantal kolommen/rijen gelijk is aan 10, loopt de

for-loop dus van 0 tot en met 9. Dit zijn dus wel het

gewenst aantal van 10 iteraties.

* Een String kan bestaan uit meerdere opgetelde Strings.
Een StringGrid kan gebruikt worden om veel Strings op te slaan en deze op index aan te spreken. Omdat we al Strings kunnen converteren naar int en double, kunnen we ook getallen (als Strings) erin opslaan.

    1. Functies

Een functie is een stukje code dat iets doet en vanuit het hele programma aangeroepen kan worden. Functies maken code leesbaarder (door een duidelijke naam te kiezen) en maken 'copy-paste code' onnodig.


/* Return type */ /* Functienaam */ ( /* Argumenten */ )

{

/* Functie code */



}
bool IsPaswoordJuist(String paswoord)

{

bool isJuist = false;



if (paswoord == "iloverichel")

{

isJuist = true;



}

return isJuist;

}




Geef een eenheid, zoals een functie, een duidelijke verantwoordelijkheid.

De functie 'IsPaswoordJuist' kan als volgt worden aangeroepen:


void __fastcall TForm1::Button1Click(TObject *Sender)

{

String s = Edit1->Text;



bool gelukt = IsPaswoordJuist(s);

if (gelukt == true)

{

/* Iets */



}

}
Merk het volgende op:

* De functie 'IsPaswoordJuist' heeft een enkel argument van

het type String en noemt deze String intern 'paswoord'.

Als deze functie aangeroepen wordt, hoeft deze String

helemaal niet 'paswoord' te heten. Button1Click noemt het

paswoord 's', geeft deze String aan 'IsPaswoordJuist' en

deze noemt deze String intern anders. Een functie heeft

een eigen, beperkte scope.

* De functie 'IsPaswoordJuist' geeft een bool terug noemt

deze bool intern 'isJuist'. Als deze functie aangeroepen

wordt, hoeft de teruggegeven bool helemaal niet 'isJuist'

te heten. Button1Click noemt deze bool 'gelukt'. Een

functie heeft een eigen, beperkte scope.


Een functie is te vergelijken met een mannetje in een machine. Bovenstaande machine (functie) heet 'IsPaswoordJuist' en heeft een enkel in-laatje (argument) waar een String in moet en een enkel uit-laatje waar een bool in komt te zitten. Het mannetje in de machine noemt het in-laatje 'paswoord'. Degene die de machine gebruikt kan er elke String in stoppen die 'ie maar wil en de uitkomende bool noemen hoe 'ie wil.
Een functie kan ook geen return type hebben. Dan is het return type void (void betekend 'leeg'). Dit wordt een void-functie of procedure genoemd.
void LaatCoordinatenZien(TStringGrid * stringGrid)

{

int maxy = stringGrid->RowCount;



int maxx = stringGrid->ColCount;
for (int y=0; y!=maxy; ++y)

{

for (int x=0; x!=maxx; ++x)

{

String s



= "(" + IntToStr(x) + "," + IntToStr(y) + ")";

stringGrid1->Cells[x][y] = s;

}

}

}


Merk het volgende op:

* In het argument staat een sterretje. Dit is omdat een

StringGrid van het type 'TStringGrid *' is. Later zullen

we dit type een 'TStringGrid pointer' gaan noemen.

* Er wordt geen gebruik gemaakt van return. Bij de

accolade-sluiten van deze void-functie gebeurt dit

automatisch. return kan wel gebruikt worden. Dit is

nuttig bij het voortijdig beeindigen van een void-

functie.
Een functie kan ook geen argumenten hebben:
String GetPaswoord()

{

return "iloverichel";



}
void __fastcall TForm1::Button1Click(TObject *Sender)

{

String paswoord = GetPaswoord();



String ingevoerd = Edit1->Text;

if (paswoord == ingevoerd)

{

/* Iets */



}

}
Merk op dat bij het aanroepen van een functie zonder argumenten wel twee ronder haakjes gebruikt worden. Zouden deze haakjes weggelaten worden, dan denkt de compiler dat het geheugenadres van de functie wordt aangeroepen.






In C heeft een functie zonder argumenten void tussen de ronde haken staan (bijvoorbeeld 'bool DoeIets(void);'. Dit is walgelijk ('an abomination') in C++.



1   ...   15   16   17   18   19   20   21   22   ...   49

  • Functies

  • Dovnload 5.04 Mb.