Conditionele expressie

21
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

description

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 - PowerPoint PPT Presentation

Transcript of Conditionele expressie

Page 1: 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

Page 2: Conditionele expressie

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

Page 3: Conditionele expressie

Komma-operator voorbeeld

S = 0;while (cin >> i , i > 0) s+=i;

Page 4: Conditionele expressie

Het afsluiten van een rij ingetypte getallenint 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;}

Page 5: Conditionele expressie

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

Page 6: Conditionele expressie

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

Page 7: Conditionele expressie

Eenvoudige arrays

int a[100];

a[0],a[1],…,a[99]

a[3 * i + 1]

const int aantal = 100;int a[aantal];

Page 8: Conditionele expressie

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 = “Jan”;

char naam = {‘J’,’a’,’n’};

Page 9: Conditionele expressie

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;}

Page 10: Conditionele expressie

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

Page 11: Conditionele expressie

Klasse met lidfuncties

• Lidfuncties = methoden uit java• class naam {

public: …

private: …

}int main(){

…}

Page 12: Conditionele expressie

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)

Page 13: Conditionele expressie

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)

Page 14: Conditionele expressie

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();!

Page 15: Conditionele expressie

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

Page 16: Conditionele expressie

& en const bij parameters• Cf. vensters.cpp p. 86• venster omvattend (venster v) {...}

• v is waardeparameter dwz KOPIE VAN van v doorgeven aan functie

• origineel kan niet wijzigen door de uitvoer 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 door het

uitvoeren van de functie

Page 17: Conditionele expressie

& 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!)

Page 18: Conditionele expressie

& en const bij parameters

1. Schrijf geen & en const bij primitieve types, tenzij punt 3 van toepassing is

2. Schrijf & en const bij klassetypes, tenzij punt 3 van toepassing is

3. Als je het argument wilt wijzigen, schrijf dan wel & maar geen const

Page 19: Conditionele expressie

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

Page 20: Conditionele expressie

inlining• Na compilatie, bij uitvoering:

• functie-code ergens in geheugen• bij functie- aanroep:

• voorbereiding: bvb argumenten doorgeven via registers

• Sprong naar functiecode, achteraf sprong terug• nadelig voor zeer korte functies, vooral in lus

• oplossing:• aangeven dat we inline code wensen mbv

keyword inline• compiler kopiëert de functiecode tussen de

overige code : meer code, maar geen sprongen meer!!

Page 21: Conditionele expressie

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