Kapitel 4 - Mallar. Kapitel 4. Introduktion till mallar STL. 2D1387 Programsystemkonstruktion med C++ 1
|
|
- Åsa Åberg
- för 5 år sedan
- Visningar:
Transkript
1 Kapitel 4 Introduktion till mallar STL 2D1387 Programsystemkonstruktion med C++ 1
2 Kapitel 4 - Klassmallar, funktionsmallar och STL Funktionsmallar Klassmallar Mallar för medlemmar Specialisering Standardbiblioteket för mallar (STL): Namnrymden std std::string STL-behållare (vector, list, map, deque, set, multimap, multiset) Iteratorer, algoritmer, funktionsobjekt 2D1387 Programsystemkonstruktion med C++ 2
3 Mallar Funktionsmallar Klassmallar Medlemsfunktioner som mallfunktioner 2D1387 Programsystemkonstruktion med C++ 3
4 Funktionsmallar Antag att du har två likadana funktioner med den enda skillnaden att de arbetar på olika typer (t.ex. double och int) Ett bättre alternativ är då funktionsmallar (function templates) Typen blir en parameter till funktionen och bestäms vid kompileringstillfället 2D1387 Programsystemkonstruktion med C++ 4
5 Funktionsmallar Typen är en parameter T Gränssnitet för alla typer T måste klara allt som funktionen begär, t.ex. +, = och anrop till en funktion print() Detta medför att man kan skriva en funktion ovetandes om vilken typ den ska arbeta på, så länge typen uppfyller kraven på gränssnittet Man talar om polymorfi vid kompileringstillfället 2D1387 Programsystemkonstruktion med C++ 5
6 Funktionsmallar Ett första exempel på funktionsmall class A { // A är en klass som klarar av att jämföras public: bool operator<(const A &a) const { return i < a.i; } int i; }; template<class T> // funktionen max använder operator< const T &max(const T &t1, const T &t2) { return t1 < t2? t2 : t1; } A a, b; max(a, b); max(2.14, 3.14); 2D1387 Programsystemkonstruktion med C++ 6
7 Funktionsmallar Ett mer avancerat exempel på funktionsmall struct A { virtual ~A() {} }; struct B : A {}; struct C : A {}; template<class T> // generisk factoryfunktion A *create() // returnerar pekare till basklass { return new T; // skapa instans av typ T } A* (*fp)(); // funktionspek, inga arg, returnera A* fp = create<b>; // peka på B-factory A *b = fp(); // skapa ett B-objekt fp = create<c>; // peka på C-factory A *c = fp(); // skapa ett C-objekt 2D1387 Programsystemkonstruktion med C++ 7
8 Klassmallar För att skapa en vektorklass som innehåller godtycklig typ använder man en klassmall (class template): // i fil array.h template<class T> class Array { public: Array() {} const T &operator[](int i) const; // this är konstant T & operator[](int i); // this är ej konst protected: T array[100]; };... 2D1387 Programsystemkonstruktion med C++ 8
9 Klassmallar // fortsättning på fil array.h template<class T> // obs hur klassen anges const T& Array<T>::operator[](int i) const { return array[i]; } template<class T> // obs hur klassen anges T& Array<T>::operator[](int i) { return array[i]; } Array<int> a; // instansiera a[2] = 5; // ok: operator[] returnerar T& 2D1387 Programsystemkonstruktion med C++ 9
10 Mallar för medlemsfunktioner Funktionsmallar fungerar lika bra för klassmedlemmar class A { public: template<class T> void foo(t t) const { std::cout << "type: " << typeid(t).name() << std::endl; } }; A a; void *p = 0; a.foo(7); // type: int a.foo(3.14); // type: double a.foo(p); // type: void * a.foo(a); // type: class A 2D1387 Programsystemkonstruktion med C++ 10
11 Specialisering Med en specialisering (specialization) särbehandlar man typer template<class T> // klarar alla typer void swap(t &t1, T &t2) { T tmp = t1; // byt plats t1 = t2; t2 = tmp; } template<> // specialisering för Vector void swap(vector &v1, Vector &v2) { swap(v1.size, v2.size); // byt storlek swap(v1.p, v2.p); // byt pekare! } 2D1387 Programsystemkonstruktion med C++ 11
12 Specialisering Exempel på specialisering av medlem class A { public: template<class T> void foo(t) const { std::cout << "Unknown type" << std::endl; } template<> void foo(int) const { std::cout << "type was int" << std::endl; } template<> void foo(double) const { std::cout << "type was double" << std::endl; } }; 2D1387 Programsystemkonstruktion med C++ 12
13 Specialisering Exempel på specialisering av en klass // definition av vanlig mallklass template<class T> class A { T data; }; // specialisering, denna definition skapas för pekare // av alla typer, T blir typen som pekas på template<class T> class A<T *> { T data; T *ptr; }; // specialisering, denna definition skapas för void* template<> class A<void *> {}; // ingen typ T finns 2D1387 Programsystemkonstruktion med C++ 13
14 STL Standard Template Library Strängar Behållare Iteratorer Algoritmer Hjälpstrukturer 2D1387 Programsystemkonstruktion med C++ 14
15 Standardbiblioteket för mallar C++-standarden kräver att varje implementation av C++ kommer med ett stort antal mallar för klasser och funktioner. Biblioteket kallas Standard template library (STL). Allt innehåll i standardbiblioteket ligger i namnrymden std, t.ex. std::string 2D1387 Programsystemkonstruktion med C++ 15
16 Standardbiblioteket för mallar Exempel på funktionalitet i STL: strängar (#include <string>) genom std::string behållarklasser (containers) (t.ex. #include <vector> för att använda std::vector) algoritmer (#include <algorithm>) genom t.ex. std::sort eller std::foreach Funktorer och hjälpklasser 2D1387 Programsystemkonstruktion med C++ 16
17 std::pair Först, ett litet exempel på en hjälpklass #include <utility> // för pair och make_pair int main() { std::string s = "hej"; std::pair<int, std::string> pr; // skapa objekt pr = std::make_pair(7, s); // skapa nytt par std::cout << pr.first << ", " // åtkomst << pr.second << std::endl; } return 0; 2D1387 Programsystemkonstruktion med C++ 17
18 Strängar i STL 2D1387 Programsystemkonstruktion med C++ 18
19 Strängar i STL Standardbiblioteket bidrar med en kraftfull strängklass std::string. std::basic_string är en behållare som håller bokstäver såsom char eller wchar_t std::string är en typdefinition av std::basic_string<char> För minneseffektivitetens skull har de flesta implementationer infört referensräkning. 2D1387 Programsystemkonstruktion med C++ 19
20 Strängar i STL Exempel på stränganvändning: #include <string> std::string s("c++"); // skapa sträng s += " is great!"; // lägg till sträng std::cout << "True: " // använd c_str() för << s.c_str() << std::endl; // tillgång till data std::cout << "Predecessor: " // använd oper[] för << s[0] << std::endl; // tillgång till bokstav std::reverse(s.begin(), s.end()); // vänd på strängen std::cout << s << std::endl; 2D1387 Programsystemkonstruktion med C++ 20
21 Strängar i STL Exempel på medlemsfunktioner: basic_string& operator+=(const basic_string& s) basic_string& insert(size_type pos, const basic_string& s) iterator erase(iterator first, iterator last) size_type find_first_of(const basic_string& s) bool empty() const size_type size() const 2D1387 Programsystemkonstruktion med C++ 21
22 Vektorer i STL 2D1387 Programsystemkonstruktion med C++ 22
23 Vektorer i STL STL innehåller en mycket användbar behållare std::vector Vektorn i STL har dynamisk allokering, till skillnad från C-vektorer C++-standarden anger att vektorer skall garantera uppslagning och insättning / borttagning sist i konstant tid Långsamma operationer är insättning / borttagning på godtycklig plats 2D1387 Programsystemkonstruktion med C++ 23
24 Vektorer i STL Exempel på användning av std::vector: std::vector<int> v; // vektorn innehåller heltal v.push_back(3); // sätt in sist assert(v.size() == 1 && // size() ger antal element v.capacity() >= 1 && // capacity() ger max antal // element utan omallokering v.back() == 3); // hämta sista elementet v.push_back(7); // sätt in sist v.pop_back(); // ta bort sista elementet for(int i = 0; i < v.size(); i++) // skriv ut ett std::cout << v[i] << std::endl; // element i taget 2D1387 Programsystemkonstruktion med C++ 24
25 Vektorer i STL Exempel på medlemsfunktioner: void push_back(const T &) iterator erase(iterator pos) iterator insert(iterator pos, const T &) iterator begin() iterator end() void clear() void reserve(size_t) size_type size() const size_type length() const 2D1387 Programsystemkonstruktion med C++ 25
26 Listor i STL 2D1387 Programsystemkonstruktion med C++ 26
27 Listor i STL STLs lista är en implementation som har samma egenskaper som en dubbellänkad lista C++-standarden anger att insättning och borttagning skall ske på konstant tid Uppslagning av godtyckligt element är en långsam funktion eftersom man då måste iterera över elementen 2D1387 Programsystemkonstruktion med C++ 27
28 Listor i STL Exempel på användning av std::list: std::list<int> l; // listan innehåller heltal l.push_back(0); // lägg 0 sist l.push_front(1); // lägg 1 först l.insert(++l.begin(), 2); // lägg 2 efter första elem. // listan innehåller nu D1387 Programsystemkonstruktion med C++ 28
29 Listor i STL Exempel på medlemsfunktioner: void push_front(const T &) void push_back(const T &) void pop_front() void pop_back() iterator insert(iterator pos, const T &) iterator erase(iterator pos) bool empty() const void clear() size_type size() const 2D1387 Programsystemkonstruktion med C++ 29
30 Avbildningar i STL 2D1387 Programsystemkonstruktion med C++ 30
31 Avbildningar i STL För snabb uppslagning finns en behållarklass std::map C++-standarden anger att uppslagning och insättning skall ske på logaritmisk tid std::map implementeras oftast som ett rödsvart träd Iteration över elementen sker i stigande nyckelordning, t.ex. i bokstavsordning för std::string 2D1387 Programsystemkonstruktion med C++ 31
32 Avbildningar i STL Exempel på användning av std::map: struct comp_string { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; // avbildar char* till int, och ordnar // nycklarna enligt comp_string std::map<const char*, int, comp_string> months; months["januari"] = 31; months["februari"] = 28;... months["december"] = 31; std::cout << "juni har " << months["june"] << " dagar" << std::endl; 2D1387 Programsystemkonstruktion med C++ 32
33 Avbildningar i STL Exempel på medlemsfunktioner: iterator find(const key_type& k) pair<iterator, bool> insert(const value_type& x) size_type erase(const key_type& k) void clear() size_type size() const 2D1387 Programsystemkonstruktion med C++ 33
34 Avbildningar i STL Varning och tips på användning typedef std::map<std::string, std::string> map; map m; // operator[] lägger in nytt element m["mr. Brown"] = "Mrs. Brown"; m["mr. Green"] = "Mrs. Green"; // operator[] lägger in nytt element även här // och returnerar tomma strängen if(m["mr. Black"] == "") std::cout << "hoppsan" << std::endl; // bättre: använd iteratorer map::const_iterator it = m.find("mr. Red"); if(it!= m.end()) std::cout << it->second << std::endl; 2D1387 Programsystemkonstruktion med C++ 34
35 Övriga STL-behållare Vi har talat om dessa: string, vector, list, map Man bör också känna till: deque (double ended queue) set (ordnad mängd utan dubletter) multimap och multiset (map och set, fast tillåter dubletter) 2D1387 Programsystemkonstruktion med C++ 35
36 Övriga STL-behållare Derivat som använder sig av de tidigare nämnda behållarna: stack (först in sist ut) priority_queue (högst värde ut först) Numeriska behållare: bitset (sträng av ettor och nollor) valarray (matematiska vektorer) 2D1387 Programsystemkonstruktion med C++ 36
37 Hashtabeller En vanlig fråga är var man kan hitta hashtabeller i standardbiblioteket Svaret är att det inte finns några Dock kommer dessa förmodligen i nästa standard Se SGIs hemsida ( för dokumentation av hash_map, hash_set, hash_multimap, hash_multiset 2D1387 Programsystemkonstruktion med C++ 37
38 Iteratorer i STL 2D1387 Programsystemkonstruktion med C++ 38
39 Iteratorer För att iterera över behållare i STL finns iteratorer Syntaxen hos de överlagrade operatorerna i iteratorklassen imiterar pekarens syntax Iteratorer finns i varje behållarklass och heter T::iterator och T::const_iterator 2D1387 Programsystemkonstruktion med C++ 39
40 Iteratorer std::vector<int> v; std::vector<int>::iterator i; // skapa iterator... // iterera: jämför med v.end() som är utanför vektorn for(i = v.begin(); i!= v.end(); i++) // ++ ger nästa if(*i == 7) // * avrefererar { std::cout << "Found '7' in element number " << std::distance(v.begin(), i) << std::endl; } 2D1387 Programsystemkonstruktion med C++ 40
41 Iteratorer Olika typer av iteratorer (iteratorhierarkin): std::random_access_iterator = -= + - * < <= => >!= = std::bidirectional_iterator *!= = std::forward_iterator ++ *!= = std::output_iterator och std::input_iterator ++ *!= Dessa är implementerade som tomma basklasser. De används för att bestämma typ (genom t.ex. referens) 2D1387 Programsystemkonstruktion med C++ 41
42 Algoritmer och funktionsobjekt 2D1387 Programsystemkonstruktion med C++ 42
43 Algoritmer I STL finns många användbara algoritmer Samtliga algoritmer opererar på iteratorer Iteratorer finns för alla behållare och algoritmerna fungerar därför på alla behållare Detta gäller även dem man skriver själv, förutsatt att iteratorn uppfyller villkoren 2D1387 Programsystemkonstruktion med C++ 43
44 Algoritmer #include <algorithm> // algoritmer int a[] = {1, 4, 2, 8, 5, 7}; const int n = sizeof(a) / sizeof(int); // antal element std::sort(a, a + n); // sortera std::copy(a, a + n, // mata ut std::ostream_iterator<int>(std::cout, " ")); std::vector<int> b; b.push_back(7);... std::sort(b.begin(), b.end()); // sortera std::unique(b.begin(), b.end()); // ta bort dubletter 2D1387 Programsystemkonstruktion med C++ 44
45 Funktionsobjekt Funktionsobjekt (function objekt) är objekt som imiterar syntaxen hos en funktion En fördel i jämförelsen med funktionspekare är att funktionsobjekt kan innehålla data När man använder funktionspekare sker alla anrop genom att avreferera pekaren. Samtidigt är det svårt att göra funktionen inline 2D1387 Programsystemkonstruktion med C++ 45
46 Funktionsobjekt struct less_abs { bool operator()(double x, double y) { return fabs(x) < fabs(y); } }; std::vector<double> v;... // konstruera less_abs-objekt std::sort(v.begin(), v.end(), less_abs()); // rand är fkt.pekare std::vector<int> u(100); std::generate(u.begin(), u.end(), rand); 2D1387 Programsystemkonstruktion med C++ 46
47 Funktionsobjekt Skilj på typer och objekt (instanser av typer) struct A { int i; }; struct Comp { bool operator()(const A &a, const A &b) const { return a.i < b.i; } }; // Comp är en typ och används inuti std::map // vid kompileringstillfället std::map<a, A, Comp> m; // Comp() är en instans och används i funktionen // std::sort vid körningstillfället std::vector<a> v; std::sort(v.begin(), v.end(), Comp()); 2D1387 Programsystemkonstruktion med C++ 47
Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL
Kapitel 4 Introduktion till mallar STL Kapitel 4 - Klassmallar, funktionsmallar och STL Funktionsmallar Klassmallar Mallar för medlemmar Specialisering Standardbiblioteket för mallar (STL): Namnrymden
Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL
Kapitel 4 Introduktion till mallar STL Kapitel 4 - Klassmallar, funktionsmallar och STL Funktionsmallar Klassmallar Mallar för medlemmar Specialisering Standardbiblioteket för mallar (STL): Namnrymden
2D1387, Programsystemkonstruktion med C++ 01/02 1
2D1387, Programsystemkonstruktion med C++ 01/02 1 Slide 1 Del4 Klassmallar, funktionsmallar och STL Ämnesområden denna föreläsning: Funktionsmallar (function templates) Klassmallar Mallar för medlemmar
Strömmar och strängar
Strömmar och strängar Strömmar In- och utmatning Strängar Delsträngar Strömmar och strängar Först, grunderna: Utmatning Inmatning Strängar Sedan, mer tillämpningsorienterat: Läsning av rader Stränghantering
Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet
Kapitel 3 Klassanvändning Operatorer Pekare Kapitel 3 - Klassanvändning, operatorer och pekare Vänner till klasser och funktioner Virtuella funktioner och polymorfi Abstrakta basklasser och strikt virtuella
Tentamen *:85/2I4123 C
DSV Sid 1(6) *:85/2I4123 Jozef Swiatycki 2006-01-21 Tentamen *:85/2I4123 C++ 2006-01-21 Denna tentamen består av fyra uppgifter som tillsammans kan ge maximalt 30 poäng. För godkänt resultat krävs minst
Intro till standardbiblioteket. Eric Elfving
Intro till standardbiblioteket Eric Elfving 1 Behållare (containers) 2 Iteratorer 3 Algoritmer 15 mars 2018 2 / 13 Bibliotekets behållare delas in i tre grupper: Sekevensbehålare (Sequence containers)
Programmering i C++ EDA623 Containerklasser och algoritmbibliotek. EDA623 (Föreläsning 10) HT 2013 1 / 33
Programmering i C++ EDA623 Containerklasser och algoritmbibliotek EDA623 (Föreläsning 10) HT 2013 1 / 33 Containerklasser och algoritmbibliotek Innehåll Containerklasser Klasserna vector och deque Iteratorer
Innehåll. Klasserna vector och deque
Innehåll EDAF30 Programmering i C++ Standardbiblioteket: Datastrukturer och algoritmer Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Datastrukturer, containerklasser Sekvenser Insättning 2 Insättningsiteratorer
Synlighet. Namespace Scope-operatorn Klasser Vänner
Synlighet Namespace Scope-operatorn Klasser Vänner Synlighet Ett problem med moduler i C är att alla variabel- och funktionsnamn ligger globalt synliga. C++ botar detta genom att införa det mycket användbara
Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.
Innehåll EDAF30 Programmering i C++ Generisk programmering med templates (mallar) Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Funktionsmalllar 2 Generisk programmering med templates (mallar) 2/1 Generisk
Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.
Algoritmbiblioteket (STL) (f.d.) Standard Template Library Samlingstyper (containers) Algoritmer Funktionsobjekt Adaptrar Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper,
Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x
Generell (template) programmering Funktionsobjekt och funktionspekare Iteratorer Algoritmer Effektiv C++ Slutliga tips Genomgång av gammal tenta Daniel Aarno bishop@kth.se 2 int compare(int i1, int i2)
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(8) Institutionen för datavetenskap Tentamen EDAF30 Programmering i C++ 2016 05 13, 8.00 13.00 Hjälpmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna.
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och
Standard Template Library STL. Behållarklasser
Standard Template Library STL Kärnan av STL utgörs av behållarklasser (containers, datasamlingar, collections...) och algoritmer för operationer på sekvenser av element. Utvecklad av Alexander Stepanov
Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner
Innehåll EDAF30 Programmering i C++ 10. Generisk programmering. Mallar och funktionsobjekt Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Funktionsobjekt Mallar med variabelt antal argument 10. Generisk
Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering
Övriga byggstenar Beroenden Pekare till funktioner Övriga byggstenar Beroenden er Definitioners synlighet Funktionspekare Icke-medlemsfunktioner Medlemsfunktioner 2D1387 Programsystemkonstruktion med C++
Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29
Programmering i C++ EDA623 Mallar EDA623 (Föreläsning 12) HT 2013 1 / 29 Mallar Innehåll Klassmallar Funktionsmallar EDA623 (Föreläsning 12) HT 2013 2 / 29 Containerklasserna vector, deque och list utgör
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2009-04-15 Tid: 8-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna ungefär
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen EDAF30 Programmering i C++ 2017 04 20, 14:00 19:00 Hjälpmedel: En valfri C++-bok. Andra papper med anteckningar eller utskrifter är
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen EDAF30 Programmering i C++ 2016 01 11, 8.00 13.00 Hjälpmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna.
DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor. Skriv
Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)
Innehåll EDAF30 Programmering i C++ 7. Felhantering. Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Felhantering Exceptions Exceptions och resurshantering Specifikation av exceptionella händelser Static
2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005
2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005 I den här labben kommer du att lära dig att använda grundläggande C++ såsom klasser, loopar, variabler och minneshantering.
SP:PROG3 HT12 Tenta 2013-01-19
DSV SU/KTH sid 1 (5) SP:PROG3 SP:PROG3 HT12 Tenta 2013-01-19 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygskriteria
Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++
Kapitel 1 Grunderna i C++ Kapitel 1 grunderna i C++ C++-programmets beståndsdelar Datatyper Funktioner och funktionsanrop Sammansatta datatyper Pekare, aritmetik och referenser Minneshantering, preprocessorn
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Kapitel 6 - Undantag
Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp
Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...
TDIU04 Programmering i C++, standardbibliotek Vt1 2015 Övningsuppgifter Innehåll Lektion 1... 2 Lektion 2... 3 Lektion 3... 4 Lektion 4... 5 Lektion 5... 6 De tre senaste tentorna finns tillgängliga via
Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning: Synlighet Överlagring av operatorer Slide 1 Vänner till klasser och funktioner
Inlämningsuppgift, EDAF30, 2016
LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programmering i C++ Inlämningsuppgift, EDAF30, 2016 1 Anvisningar för redovisning Inlämningsuppgifterna ska redovisas med en kort rapport och de
Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
Det finns många flaggor till g++,
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.
Innehåll. Pekare. Datatyper Pekare, Arrayer och Referenser. Pekare Syntax. Pekare Syntax, operatorer. 4. Standard-containers. Pekare och arrayer
Innehåll EDAF30 Programmering i C++ 4. Standard-containers. Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Semantik och syntax Referenser 2 Arrayer 3 Containers Sekvenser 4. Standard-containers. 2/1
DD2387 Programsystemkonstruktion med C++ Tentamen 2
DD2387 Programsystemkonstruktion med C++ Tentamen 2 Måndagen den 10 november 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser
Föreläsning 1 Innehåll Introduktion till objektorientering OOP (objektorienterad programmering) Objekt, instanser, klasser C++ OO i C++ Standardbibliotek Utökningar från C (syntaktiskt socker) Introduktion
C++-programmets beståndsdelar
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
Inlämningsuppgift, EDAF30, 2018
LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programmering i C++ Inlämningsuppgift, EDAF30, 2018 1 Anvisningar för redovisning Inlämningsuppgifterna ska redovisas med en kort rapport och de
Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };
Innehåll EDAF30 Programmering i C++ 6. Typer, pekare och konstanter. 1 Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Pekare och konstanter Operatorn -> Konstanter 3 Typomvandlingar 6. Typer, pekare
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Lösningsförslag till tentamen TDP004 Objektorienterad Programmering Teoretisk del
Lösningsförslag till tentamen TDP004 Objektorienterad Programmering 2008-03-26 Teoretisk del 1a). Vad är det som skiljer en virtuell funktion och en rent virtuell funktion? Du kan förutsätta att det är
Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp
Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser
Användning av typeid. Operatorerna typeid och. Filen typeinfo.h måste inkluderas. typeid
Operatorerna typeid och dynamic_cast mm - 1 Användning av typeid mm - 2 Vid dynamiskt bindning av funktioner vet man inte vilket objekt som funktionen binds till vid exekveringstillfället. Ofta saknar
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö Kö (ADT) En kö fungerar som en kö. Man fyller på den längst bak och tömmer den längst fram
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
TDIU06 Programmering g.k. Laborationer LAB2. Vt1, Dessa laborationer ingår i examinationsmomentet LAB2 och ska göras i läsperiod Vt1.
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för programvara och system (SaS) Tommy Olsson 2006-08-31 TDIU06 Programmering g.k. Laborationer LAB2 Vt1, 2007 Dessa laborationer
Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programvara och system Tommy Olsson 2014-02-05 Lektionsplanering.................................. 2 Lektion 1..........................................
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)
Innehåll EDAF30 Programmering i C++ 8. Typomvandlingar. Klasser: operatorer och polymorfism. 1 Typomvandlingar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Klasser Operatorer 3 Polymorfism och arv
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Föreläsning 4 Innehåll
Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och
grundläggande C++, funktioner m.m.
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel Ett enkelt program i C++, hello.cpp #include
Kapitel 5. Strömmar. Utmatning
Kapitel 5 Strömmar Kapitel 5 - Strömmar Utmatning med std::ostream och std::ostringstream Inmatning med std::istream och std::istringstream Överlagring av in- och utmatning Iteratorer för in- och utmatning
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenska Tentamen EDAF30 Programmering i C++ 2016 08 16, 8.00 13.00 Hjälmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna. Du
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande
Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {
Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet
Föreläsning 5-7 Operatoröverlagring
*:85/ID200V C++ HT07 Föreläsning 5-7 Operatoröverlagring Operatoröverlagring Följande operatorer kan inte överlagras: ::..*?: sizeof typeid Alla övriga operatorer kan överlagras. Följande operatorer måste
Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016
Objektorienterad Programkonstruktion Föreläsning 9 30 nov 2016 Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd,
Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1
Ett enkelt program i C++, hello.cpp C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel int
Symboliska konstanter const
(5 oktober 2010 T11.1 ) Symboliska konstanter const Tre sätt som en preprocessormacro med const-deklaration med enum-deklaration (endast heltalskonstanter) Exempel: #define SIZE 100 const int ANSWER =
2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 2 september 2006
2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 2 september 2006 I den här labben kommer du att lära dig att använda grundläggande C++ såsom klasser, loopar, variabler och minneshantering.
F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander
F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder
Tentamen C++-programmering
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen C++-programmering 2016 03 19, 8.00 13.00 Hjälpmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna. Du ska i
Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering
Innehåll EDAF30 Programmering i C++ 6. Resurshantering Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Smarta pekare 3 Klasser, resurshantering
Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning: Klasser, åtkomst Medlemmar, medlemsfunktioner, inline Slide 1 Konstruktorer Destruktorer
Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 2014-2015. Lektion 3
Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret 014-015 Lektion 3 Denna lektion är temat hur man effektivt ska organisera den data som en algoritm använder för att åtkomsten till datan
Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )
TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
Föreläsning 11 Genomgång av inlämningsuppgiften
*:85/ID200V C++ HT07 Föreläsning 11 Genomgång av inlämningsuppgiften Inluppen: exempel på en liten tillämpning Vandring över skärmen med piltangenterna När markören hamnar över en knapp visas knappen med
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar
Programmering för språkteknologer II, HT2011. Rum
Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Idag - Hashtabeller - Flerdimensionella arrayer (2D) 2 Repetition -
Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv
Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner
Objektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Länkade strukturer. (del 2)
Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion
Samlingar Collection classes
Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 mars 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections Olika slag av samlingar i Java Arrayer (Till exempel: int[])
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel
Data- och Programstrukturer Provmoment: Ladokkod: Tentamen ges för: Omtentamen NDP011 Systemarkitektprogrammet 7,5 högskolepoäng Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum:
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
Standard Template biblioteket, eller STL, är ett C++ bibliotek innehållande: STL tillhandahåller många grundläggande algoritmer och datastrukturer:
2 B CD D D D D L / Begreppen koncept modeller av koncept Hur iteratorer fungerar Vad man ska tänka på vid lagring av pekare till objekt i SL Vilka olika sätt finns det att lagra subklasser i SL Standard
Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4
Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar
Innehåll. Datatyper Pekare, Arrayer och Referenser. Pekare. Pekare Syntax. Pekare Syntax, operatorerna * och & 5. Pekare och arrayer. Algoritmer.
Innehåll EDAF30 Programmering i C++ 5. Pekare och arrayer.. Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Pekare Semantik och syntax Operatorn -> Referenser 2 Arrayer Pekare och arrayer 3 Standardbibliotekets
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv
Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll
TDDI14 Objektorienterad programmering
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för programvara och system Tommy Olsson 2015-05-27 Datortentamen i TDDI14 Objektorienterad programmering Provkod DAT1 Datum 2015-06-01
Tentamen i DD2387 Programsystemkonstruktion med C++
Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat: Datum: Tisdag 18 oktober 2011, 8-12 (rättning ca 12:40-14) Salssida (H/V): id: Hjälpmedel: En eller två valfria läroböcker om C++ Tid: 4 timmar
4. Standard-containers. Strömmar och filer
EDAF30 Programmering i C++ 4. Standard-containers. Strömmar och filer Sven Gestegård Robertz Datavetenskap, LTH 2017 Innehåll 1 Containers Sekvenser Iteratorer Avbildningar och mängder 2 Strömmar och filer
Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer
Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering
Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)
Innehåll EDAF30 Programmering i C++ 2. Användardefinierade typer Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Deklarationer, scope och livstid 2 Användardefinierade typer 3 Standardbibliotekets alternativ
Föreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Kort om javadoc Abstrakta datatyper Ordböcker/Mappar Listor Stackar
Generiska konstruktioner. Kursbokens kapitel 13
Generiska konstruktioner Kursbokens kapitel 13 1 Vad är en generisk konstruktion? Generisk står för; allmän eller generell En generisk konstruktion kan användas för olika typer av data Med hjälp av templates
Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)
Innehåll EDAF30 Programmering i C++ 2. Användardefinierade typer Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Deklarationer, scope och livstid 2 Användardefinierade typer 3 Standardbibliotekets alternativ
Tentamen i DD2387 Programsystemkonstruktion med C++
Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat: Datum: Tisdag 19 oktober 2010, 14-18 (rättning 18-19) sal: id: Hjälpmedel: En eller två valfria läroböcker om C++ Tid: 4 timmar Skriv inte
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition
Seminarium 4 Köer och Stackar Innehåll ADT:erna Kö och Stack Definitioner Operationer Exempel på användning Givna klasser i Java Interfacet Queue Klassen Stack Klassen LinkedList Klassen PriorityQueue
2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursens hemsida: http://www.nada.kth.se/kurser/kth/2d1387 Varför vill