Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina20/49
Datum25.10.2017
Grootte5.04 Mb.

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

De debugger en functies

Zet eens een breakpoint op een regel waarin een functie wordt aangeroepen, bijvoorbeeld onderstaande regel uit bovenstaand stuk code.


String paswoord = GetPaswoord();
Als het programma op dit punt stopt, kun je twee dingen doen:

* Step Over (F8) om naar de volgende regel te gaan

* Trace Into (F7) om in de functie te gaan
Met 'Trace Into' op een regel met een functie aanroep gaan we in een functie.

    1. Waar zet ik mijn functies in Kylix? Unit1.h?

Een goede plek om functies neer te zetten is in 'Unit1.cpp' en 'Unit1.h'. Met CTRL-F6 kan gewisseld worden tussen deze twee.


Een Unit is gedefinieerd als een header file met een implementatie bestand met dezelfde naam. De header file heeft als extensie .h of .hpp, een implementatie bestand .cpp.
Een header file bevat in de regel definities en een implementatie bestand declaraties. Een definitie is 'wat er is', een declaratie is 'hoe dit werkt'.
Hieronder staat een voorbeeld van een 'Unit1.h' bestand:
//---------------------------------------------------------#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------#include

#include

#include

#include

#include

//---------------------------------------------------------class TForm1 : public TForm

{

__published: // IDE-managed Components

TStringGrid *StringGrid1;

TButton *Button1;

TButton *Button2;

TEdit *Edit1;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------extern PACKAGE TForm1 *Form1;



//---------------------------------------------------------bool IsPaswoordJuist(String paswoord);

void LaatCoordinatenZien(TStringGrid * stringGrid);

//---------------------------------------------------------

#endif
Merk het volgende op:

* Er is een soort 'primitief if-statement' te zien met het

#ifndef, #define en #endif trio. Dit wordt een #include

guard genoemd.

* Er worden veel dingen #included. Met #include kan een

header file worden gelezen. Alle 5 #includes zijn

automatisch hier geplaatst door Kylix en zorgen ervoor

dat de compiler al onze Components kent. Het ligt voor de

hand dat 'QForms.hpp' de informatie voor een Form bevat

en 'QGrids.hpp' voor TStringGrid.

* Op het Form staan een StringGrid, twee Buttons en een

Edit Component gedeclareerd.

* Deze Components hebben als identifiers StringGrid1,

Button1, Button2 en Edit1.

* StringGrid1 is van het data type 'TStringGrid *'. Ook de

andere Components hebben een asterisk in hun data type

declaratie. Een 'TStringGrid *' wordt als 'TStringGrid

pointer' uitgesproken.

* De Event 'Button1Click' en 'Button2Click' zijn

gedeclareerd.

* De functies 'IsPaswoordJuist' en 'LaatCoordinatenZien'

zijn gedeclareerd. Een declaratie van een functie eindigd

met een puntkomma.

* Alle declaraties staan tussen de #ifndef en #endif.

* Er is ook een 'extern PACKAGE' TForm1 pointer genaamd

Form1. Dit is de declaratie van de pointer waar we altijd

al mee hebben gewerkt.
Hieronder staat de implementatie van Unit1.cpp:
//---------------------------------------------------------

#include

#pragma hdrstop
#include "Unit1.h"

//---------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.xfm"

TForm1 *Form1;

//---------------------------------------------------------



__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (IsPaswoordJuist(Edit1->Text) == true)

Button1->Caption = "Gevonden!";

}

//---------------------------------------------------------



void __fastcall TForm1::Button2Click(TObject *Sender)

{

LaatCoordinatenZien(StringGrid1);



}

//---------------------------------------------------------bool IsPaswoordJuist(String paswoord)

{

if (paswoord == "iloverichel")

return true;

else

return false;

}

//---------------------------------------------------------



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)

{

stringGrid->Cells[x][y]



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

}

}



}

//---------------------------------------------------------


Merk het volgende op:

* In de eerste regel wordt 'clx.h' ge-#include. Dit is de

belangrijkste header file van de CLX, de grafische

bibliotheek waarmee we werken.

* Unit1.h wordt ook ge-#include. Dit is de header file van

ons Form.

* De volgorde van Button1Click, Button2Click,

IsPaswoordJuist en LaatCoordinatenZien is niet

belangrijk.

* Er worden verkorte schrijfwijzen gebruikt:

* Omdat 'Edit1->Text' een String is, mag deze ook direct

in de functie IsPaswoordJuist worden gestopt.

* Als een if-statement maar een statement hoeft uit te

voeren, mogen de accolades weggelaten worden.

* De TForm1 pointer Form1 staat hier ook weer, zonder de

woorden 'extern PACKAGE' ervoor. Dit is de definitie van



onze veelgebruikte pointer.
Het is mogelijk een functie definitie in Unit1.h te zetten. Dan hoeft deze functie niet meer gedefinieerd te worden, maar dit mag wel. De volgorde maakt nu wel uit: alleen functies die 'boven' een functie staan kunnen worden aangeroepen.




Op elke plaats in C++ code kunnen alleen reeds gedeclareerde functies worden aangeroepen.

#ifndef Unit1H

#define Unit1H
//...
bool FunctieA(String a)

{

/* iets */



}
bool FunctieB(String b)

{

if ( FunctieA(b) == true) /* iets */

/* iets */

}
#endif //Functie declaraties moeten voor de #endif



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

  • Waar zet ik mijn functies in Kylix Unit1.h

  • Dovnload 5.04 Mb.