1 / 21

Conditionele expressie

Conditionele expressie. expressie1 ? expressie2 : expressie3 Vb. z = (a < b ? a + 1 : b – 1) If (a < b) z = a + 1 else z = b – 1; Voordeel: compactere code. De komma-operator. expressie1 , expressie2

Télécharger la présentation

Conditionele expressie

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. Conditionele expressie expressie1 ? expressie2 : expressie3 Vb. z = (a < b ? a + 1 : b – 1) If (a < b) z = a + 1 else z = b – 1; Voordeel: compactere code

  2. De komma-operator expressie1 , expressie2 Beide expressies worden in gegeven volgorde geëvalueerd en de waarde van expressie2 wordt als waarde van de gehele komma-expressie afgeleverd

  3. Komma-operator voorbeeld S = 0; while (cin >> i , i > 0) s+=i;

  4. Het afsluiten van een rij ingetypte getallen int main() {double s=0,x; cout << “Tik getallen in,gescheiden door spaties,\n” << “met een regel tekst na het laatste getal:\n”; while (cin >> x , !cin.fail()) s+= x; cin.clear(); char ch; do cin.get(ch); while (ch != ‘\n’); cout << “de eerste som is “ << s << endl; s = 0; cout << “Nog een keer alstublieft:\n”; while (cin >> x , !cin.fail()) s+= x; cout << “de tweede som is “ << s << endl; return 0; }

  5. bitmanipulatie • &  bitsgewijze EN : 1001 & 1100 = 1000 • | bitsgewijze OF : 1001 | 1100 = 1101 • ˆ  bitsgewijze XOR : 1001 ^ 1100 = 0101 • ˜ INVERSIE: ˜1010 = 0101 • « SCHUIVEN NAAR LINKS: 0101 1010 << 3 = 1101 0000 • » SCHUIVEN NAAR RECHTS(machine- / compilerafhankelijk) 0101 1010 >> 3 = 0000 1011

  6. unsigned • Kan voor short, int en long • Unsigned = unsigned int • Variabelen van deze types kunnen niet negatief worden • Meest linkse bit is geen tekenbit, maar macht van 2 • Positief getalbereik X 2

  7. Eenvoudige arrays int a[100]; a[0],a[1],…,a[99] a[3 * i + 1] const int aantal = 100; int a[aantal];

  8. Array initialiseren int a[3] = {15,20,8}; float b[4] = {12.0,3.1}; float c[5]; b[4] = {12.0,3.1,0,0} char naam = {‘J’,’a’,’n’}; char naam = “Jan”;

  9. Definitie en declaratie van een functie #include <iostream> using namespace std; float fun (float x, float y, int i, int j) {int noemer = i – j; return noemer == 0? 1e20 : (x – y)/noemer } int main() {float xx, yy; int ii,jj; cout << “Geef twee float en twee int waarden:”; cin >> xx >> yy >> ii >> jj; cout << “berekende functiewaarde:”; << fun(xx,yy,ii,jj) << endl; return 0;}

  10. functies • Type-conversie voor parameters en return waarde (!automatische conversie van vb. double naar int = afkapping) • Volgorde van functies (altijd declareren voor gebruik; definitie kan later) • void • geen parameters

  11. Klasse met lidfuncties • Lidfuncties = methoden uit java • class naam { public: … private: … } int main(){ … }

  12. klasse • vkv v; • Object van het type vkv aanmaken (geheugenruimte voorzien voor de lidvariabelen) • v.coeff(a,b,c) (lidvariabelen a,b,c van v krijgen waarden uit main) • double wortel1() const {return x1;} (const  object v ongewijzigd door oproep) • Lidvariabelen graag private • struct ipv class (default public ipv private)

  13. klassen • Lidfuncties buiten de klasse definiëren • Wanneer? Als de functies wat uitgebreider zijn • Wel declareren binnen de klasse; definitie erbuiten: Vb. in klasse: bool losOp(); (declaratie) buiten klasse: bool vkv::losOp() … (definitie)

  14. constructoren • Cf java: i.e.lidfuncties die automatisch worden aangeroepen bij het creëeren van een nieuw klasse-object naam = naam klasse • geen new (java) vkv(1.0,2.0,3.0) Constructor zonder parameters: vkv v; niet vkv v();!

  15. Overloading en default-parameters • Onderscheid door het aantal en/of type van parameters • Zowel voor constructors, lidfuncties als functies in programma • Default-waarden aan parameters geven binnen delaratie of definitie; zelfde constructor (of lidfunctie) wordt gebruikt met één of meer argumenten, voor overige worden achteraan beginnend default-waarden verondersteld

  16. & en const bij parameters • Cf. vensters.cpp p. 86 • vensteromvattend (venster v) {...} • v is waardeparameter dwz KOPIE VAN van v doorgeven aan functie • origineelkan niet wijzigen door deuitvoer van de functie, aangezien het gaat om een kopie • venster omvattend (venster &v) {...} • v is referentieparameter, dwz WIJZER NAAR (= adres van) v doorgeven (efficiëntie!) • Origineel kan WEL veranderen doorhet uitvoeren van de functie

  17. & en const bij parameters • venster omvattend (const venster &v){…} • Door const te gebruiken geven we aan dat het onmogelijk is binnen de functie het argument te wijzigen (veiligheid!)

  18. & en const bij parameters • Schrijf geen & en const bij primitieve types, tenzij punt 3 van toepassing is • Schrijf & en const bij klassetypes, tenzij punt 3 van toepassing is • Als je het argument wilt wijzigen, schrijf dan wel & maar geen const

  19. inlining • Inline functies worden niet geïmplementeerd als gewone functies (op een andere plaats in het geheugen en dan met parameterbindingen), maar de code van de functie wordt gewoon gesubstitueerd op de plaats van de aanroep • Voordeel: sneller!! • Ook lidfuncties binnen de klasse zal de compiler implementeren als inline-functies

  20. inlining • Na compilatie, bij uitvoering: • functie-code ergens in geheugen • bij functie- aanroep: • voorbereiding: bvb argumenten doorgeven viaregisters • Sprong naar functiecode, achteraf sprong terug • nadelig voor zeer korte functies, vooral in lus • oplossing: • aangeven dat we inline code wensenmbv keyword inline • compiler kopiëert de functiecode tussen deoverige code : meer code, maar geen sprongen meer!!

  21. Inlining voorbeeld inline int minimum (int a, int b) { return (a < b ? a : b); } int min = minimum (tel, noem); int min = (tel < noem ? tel : noem); i. p. v. sprong naar functie

More Related