1 / 33

Datastructuren

Datastructuren. Introductie tot de programmeeropgaven in C++ Jan van Rijn jvrijn@liacs.nl. Inhoud. Klassen Inheritance Pointers References Const correctness Standaard c++ library Templates. KIassen. Voordelen van klassen?. Klassen. Voordelen van klassen? Modelleren Modulariteit

Download Presentation

Datastructuren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Datastructuren Introductie tot de programmeeropgavenin C++ Jan van Rijnjvrijn@liacs.nl

  2. Inhoud Klassen Inheritance Pointers References Const correctness Standaard c++ library Templates

  3. KIassen Voordelen van klassen?

  4. Klassen Voordelen van klassen? Modelleren Modulariteit Informatie afschermen Makkelijk(er) te debuggen

  5. Klassen class Box { public: void init( int, int, int ); int getVolume( ); int getLength( ); void setLength( ); … private: int length, width, height; };

  6. Klassen Klassen bestaan uit methods (members) en variabelen public: toegankelijk vanuit het gehele programma private: toegankelijk alleen vanuit de klasse Variabelen zijn normaal gesproken private Initialiseren in constructor Ophalen m.b.v. speciale getter functie Aanpassen m.b.v. setter functie

  7. Klassen int Box::getLength( ) { return length; } void Box::setLength( int l ) { length = l; }

  8. Klassen • Werking van een programma kan opgesplitst worden in classes • Elke class hoort een declaratie in een header file te hebben en een uitwerking in een source file • Elke (enigszins grote) class in aparte file • Header file extensies: .h/.hpp/.hh • Source file extensies: .cpp/.cc • Source files worden apartgecompiled; header files worden alleen met includes bijgevoegd

  9. Klassen • Met goed gebruik van classes zijn geen globale variabelen nodig • Functies bevatten bij voorkeur hooguit 10-15 regels code • Classes horen te werken als een black box; het gebruik laat niets zien over de interne werking • De header file is een uitstekende plek voor (veel) commentaar (Doxygen)

  10. Klassen • Constructor • Wordt automatisch aangeroepen bij het aanmaken. • Prima manier om variabelen te initialiseren • public Box() { } • Destructor • Wordt automatisch aangeroepen bij • Essentieel om geen geheugen geblokkeerd te houden • ~Box() { }

  11. Inheritance Wordt gebruikt om Functionaliteit te hergebruiken Eenheid te creëren tussen classes Kinderen die een ouder uitbreiden nemen alle members van de ouder over, behalve private members en variabelen Kinderen kunnen members overschrijven

  12. Inheritance Naast public en private, nu ook protected variabelen en members protected: Variabele / functie is ook beschikbaar in child classes

  13. Inheritance class LabeledBox : public Box { public: void init( int, int, int, char ); protected: char label; };

  14. Inheritance virtual Staat als keyword voor de method van de parent class Maakt dat bij aanroep van een functie dynamisch wordt bepaald van welke class deze wordt aangeroepen Virtual constructor wordt niet gebruikt Virtual destructor is essentieel voor het opruimen van members van de child class! Definieer daarom altijd een virtual destructor

  15. Inheritance • Een Abstract Base Class (ABC) is een klasse waarin de functies niet geïmplementeerd zijn • Meeste functies zijn virtual • virtual int doSometing() = 0; • Goede start van een klasse • Child classes implementeren alle functies.

  16. Inhoud Klassen Inheritance Pointers References Const correctness Standaard c++ library Templates

  17. Pointers Variabelen bestaan uit twee elementen: Geheugenadres Waarde De waarde van een pointer is het geheugenadres van een andere variabele.

  18. Pointers int i, j, *p; i = 10; j = 20; p = &i; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; *p = 15; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; *p = j; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl; p = &j; *p = 40; cout << "i = " << i << "; j= "<< j << "; p= " << *p << endl;

  19. Pointers Uitkomst: i = 10; j= 20; p= 10 i = 15; j= 20; p= 15 i = 20; j= 20; p= 20 i = 20; j= 40; p= 40

  20. References Verwijzen naar een variabele, net als pointers, maar zijn constant en nooit null Netter dan pointers, door constantness, en duidelijker in notatie Waarde wordt toegekend bij initialisatie

  21. Rererences int i, &j = i; i = 20; cout << "i = " << i << "; j = " << j << endl; j = 40; cout << "i = " << i << "; j = " << j << endl; • Waar zagen we de & eerder?

  22. Rererences • Pas op bij het maken van een reference naar een private variabele, dit kan het information hiding principe ondermijnen.

  23. Const correctness • Methods uit classes kunnen ook constant zijn! Een constmethod moet de class onveranderd laten. • Een correcte getter functie:MyObj const & MyClass::getMyObj() const{ return myobj;} • En de setter variant:voidMyClass::setMyObj(MyObj const & myobj){this->myobj = myobj;}

  24. Const correctness • Correctheid bij het werken met constanten heeft voordelen • Werkt als een stukje commentaar • Voorkomt misbruik via references en pointers • Werk vanaf het begin const correct! • Later terugwerken kost veel moeite

  25. Const correctnes • Het verschil tussen: • int const* p; // p is pointer to const int • int* const p; // p is const pointer to int • int const* const p;//p is const pointer to const int • Lees van rechts naar links! • In veel standaarden wordt de naam van een var die const is in hoofdletters geschreven. Niet verplicht, wel raadzaam.

  26. Standard C++ Library Bestaand uit: C libraries: cmath, cstdlib, ctime, ... cmath: M_PI, sin() cstdlib: (s)rand() ctime: time() STL libraries vector, list, stack, map, deque, … Algorithm iostream, fstream, stringstream, ... Other libraries: string

  27. Standard C++ Library stack<string> allwords; allwords.push(“voorbeeld”); cout << "Number of words = " << allwords.size() << endl; while (!allwords.empty()) { cout << allwords.top() << endl; allwords.pop(); }

  28. Standard C++ Library In cstdlib geeft rand() een integer terug in het bereik [0, RAND_MAX] Elk random getal is pseudorandom Reëel random getal in [min, max)? (double)rand() / ((double)RAND_MAX + 1.0)geeft een getal r in [0.0, 1.0) min + r * (max – min) is redelijkdeling van RAND_MAX door r is beter rand() is voldoende voor Datastructuren

  29. Templates int add(const int x, const int y) { return x + y; } double add(const double x, const double y) { return x + y; }

  30. Templates Templates Bestaan voor functies en voor classes Geven een of meer opties voor datatypes bv vector<int> of vector<float> Creëren een nieuwe instantie van de class of functie tijdens compile time, wanneer deze ergens gebruikt wordt Standard c++ library maakt intensief gebruik van templates

  31. Templates template<typename T> T const add(T const &t1, T const &t2) { return t1 + t2; }

  32. Samenvatting Eisenvoorprogrammeeropdrachten: Teams van maximaal 2 personen C++, werkt op Linux en Windows (makefile) Werk met een goede class verdeling Voldoende commentaar bij elke class/method Geen te lange functies Scheiding public/private, constcorrectness Gebruik abstracte classes voor ADT's waar nuttig Optioneel: gebruik van templates

  33. Vragen? http://www.parashift.com/c++-faq/ Tijdens werkcolleges Buiten werkcolleges: jvrijn@liacs.nl

More Related