Thuis
Contacten

    Hoofdpagina


Programmeren in C++ voor beginners

Dovnload 5.04 Mb.

Programmeren in C++ voor beginners



Pagina23/49
Datum25.10.2017
Grootte5.04 Mb.

Dovnload 5.04 Mb.
1   ...   19   20   21   22   23   24   25   26   ...   49

double DeelDoor(const double teller, const double noemer)

{

assert(noemer != 0.0);



return teller / noemer;

}
Hiermee zeg je dat de argumenten in de scope van de functie onveranderlijk zijn.


Pointers, naar bijvoorbeeld Button1, kunnen op twee manieren const zijn:

* Datgeen waar de pointer naar wijst blijft const

* De pointer blijft const, ofwel de pointer blijft naar

hetzelfde object verwijzen


//Wijzigt de Caption van de Button

void SetCaption(

TButton * const button,



const String caption)

{

button->Caption = caption;



}
//Leest alleen de Caption van de Button

//Deze functie zou moeten werken, maar is dit helaas niet

String GetCaption(const TButton * const button)

{

return button->Caption;

}
Het lezen van een Caption wordt tegengehouden als we TButton const maken.
Er zijn twee mogelijkheden:

* Het lezen van een Caption wijzigt de Button

* De CLX is niet const-correct, oftewel maakt niet of te

weinig gebruik van const.


Het waarschijnlijkst is de tweede optie: de CLX is niet perfect.




Het werken met const is zo'n gedoe. Het invoeren van const in je code geeft een sneeuwbal effect op het moment dat je const-correcte code niet-const-correcte code aan gaat roepen.






Gebruikt daarom meteen altijd const waar mogelijk!

Er zijn twee oplossingen:

* TButton niet-const maken

* Het gebruik van const_cast


Het niet-const maken van TButton is eigenlijk geen optie. De functie GetCaption moet de (terechte) indruk maken alleen de TButton te lezen.
Met const_cast, een broertje van static_cast, kan de constheid van een variabele worden veranderd. De functie GetCaption wordt dan als volgt:
String GetCaption(const TButton * const button)

{

//const_cast nodig omdat de CLX (nog) niet const-correct



//is... Niet zo netjes van Borland!

TButton * const buttonCopy

= const_cast<TButton *>(button);

1   ...   19   20   21   22   23   24   25   26   ...   49


Dovnload 5.04 Mb.