les 5
TRANSCRIPT
Inleiding tot ProgrammerenPracticum 5Ruben Van den [email protected]
Outline
• Strings
• Functies
2
Strings• Verzameling van karakters• #include<string> nodig
• String literal tussen dubbele quotes: "vuurwerk"• Char literal tussen enkele quotes: 'V'
• http://www.cplusplus.com/reference/string/string/
3
4
string s1 = "vuurwerk";string s2 = "specialist";
// string lengthcout << s1.length() << endl; // 8
// element accesss1[0] = 'V';cout << s1 << endl; // Vuurwerk
// append to strings2 += "en"; // specialisten
// string concatenationcout << s1 + s2 << endl; // Vuurwerkspecialisten
// substringstring substr1 = s1.substr(4); // from position 4 till the endstring substr2 = s2.substr(2,2);// from position 2 to positon 4
Strings
Outline
• Strings
• Functies
5
Functies• Een duidelijk afgebakend programmablok met
een eigen naam, dat elders in het programma aangeroepen (uitgevoerd) kan worden.
6
/** * Function that transforms a string so that all letters are uppercase * @param s: string to transform * @return uppercase string */string uppercase(string s) { for(int i = 0; i < s.length(); i++){ // change characters only if they are lowercase if((s[i] >= 'a') && (s[i] <= 'z')){ s[i] = s[i] - 'a' + 'A'; } } return s;}
Functieoproep• Roep functies op vanuit andere functies of vanuit
de main-functie
• De opgeroepen functie wordt uitgevoerd. Na afloop van de opgeroepen functie wordt de uitvoering van de oproeper hervat.
7
int main() { string s1 = "vuurwerk"; cout << capitalize(s1) << endl;}
Waarom functies?
• Vermijd duplicaat-code• Hergebruik van code in meerdere (delen van)
programma’s• Om de complexiteit van een programma in
kleinere, beter beheersbare delen te kunnen opsplitsen
• Om de leesbaarheid te verbeteren
8
Scope• Variabelen in een functie zijn lokaal. Ze zijn niet
toegankelijk buiten de functie.
• Communicatie met procedures gebeurt via parameters en return value.
9
void doSomething(){ int i = 5;}
int main() { doSomething(); cout << i << endl; // compiler error}
Parameters• Een functie kan nul of meer parameters hebben,
elk met hun eigen naam en type.• Parameters laten toe argumenten mee te geven
aan de functie wanneer ze opgeroepen wordt.• Parameters worden gescheiden door komma’s.• Parameters gedragen zich als een (lokale)
variabele binnen een functie.
10
int addition (int a, int b) { return a + b;}// function callint x = addition(5, 9);
Return value• Een functie kan een terugkeerwaarde teruggeven
aan de oproeper-functie met het return keyword.
• Een functie zonder terugkeerwaarde heeft het type void.
11
int addition (int a, int b) { return a + b;}int x = addition(5, 9);
void printMessage() { cout << "Hello everybody!";}
By value of reference• Er zijn twee soorten parameters:
- Waardeparameters- Variabele parameters
• Wat is de output van dit programma?
12
void swap(int a1, int a2) { int temp = a1; a1 = a2; a2 = temp;}
int main() { int x = 5; int y = 6; swap(x, y); cout << "x = " << x << ", y = " << y;}
Waardeparameters• Wanneer de functie wordt opgeroepen, wordt een
kopie gemaakt van de variabelen die we meegeven.
• Elke aanpassing aan de parameters heeft geen effect op de waarde van de variabele buiten de functie.
13
void swap(int a1, int a2) { int temp = a1; a1 = a2; a2 = temp;}
int main() { int x = 5; int y = 6; swap(x, y); cout << "x = " << x << ", y = " << y;}
Variabele parameters• Aangeduid met &• Wanneer de functie wordt opgeroepen, wordt een
verwijzing gemaakt naar de meegegeven variabelen.
• Elke aanpassing aan de parameters zorgt ook voor een aanpassing van de originele variabele.
• Laat toe om meer dan 1 waarde terug te geven.
14
void swap(int& a1, int& a2) { int temp = a1; a1 = a2; a2 = temp;}
int main() { int x = 5; int y = 6; swap(x, y); cout << "x = " << x << ", y = " << y;}
Standaardwaarde• Parameters kunnen een standaardwaarde
hebben.• Als de parameter niet wordt meegegeven, krijgt
de lokale variabele de standaardwaarde toegekend.
15
int addition(int a, int b=1) { return a + b;}
int main() { cout << addition(5) << endl; // 6 cout << addition(5, 4) << endl; // 9}