Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering
|
|
- Alexander Eklund
- för 7 år sedan
- Visningar:
Transkript
1 Innehåll EDAF30 Programmering i C++ 7. Resurshantering, Felhantering Sven Gestegård Robertz Datavetenskap, LTH Resurshantering Stack-allokering Heap-allokering: new och delete 2 Felhantering Exceptions Att generera exceptionella händelser Specifikation av exceptionella händelser Static assert 3 Smarta pekare 7. Resurshantering, Felhantering 2/1 Resurshantering Resource handles En resurs är något som måste allokeras och senare lämnas tillbaka minne filer (file handles) sockets lås... Organisera resurshantering med klasser som äger resursen allokerar resurser i konstruktorn lämnar tillbaks resurser i destruktorn RAII Resurshantering 7. Resurshantering, Felhantering 3/41 Resurshantering 7. Resurshantering, Felhantering 4/41 allokering på stacken Två sorters minnesallokering: på stacken - automatiska variabler. Förstörs när programmet lämnar det block där de deklarerats. på heapen - dynamiskt allokerade variabler. Överlever tills de explicit avallokeras. unsigned fac( unsigned n) if(n == 0) return 1; else return n * fac(n -1); int main () unsigned f = fac (2); cout << f; return 0; main()... unsigned f: int tmp0: fac()... unsigned n: 2 unsigned tmp0: fac() fac()... unsigned n: 1 unsigned tmp0:... unsigned n: 0 Resurshantering : 7. Resurshantering, Felhantering 5/41 Resurshantering : Stack-allokering 7. Resurshantering, Felhantering 6/41
2 Dynamiskt minne, allokering på heapen, eller i free store Utrymme för dynamiska variabler allokeras med new double * pd = new double ; allokera en double *pd = ; tilldela ett värde float * px; float * py; px = new float [20]; allokera array py = new float [20] 1.1, 2.2, 3.3; allokera och initiera Minne frigörs med delete delete pd; delete [] px; [] krävs för C- array delete [] py; Varning! se upp med parenteser Allokering av char[80] char * c = new char [80]; Nästan samma... char * c = new char (80); Nästan samma... char * c = new char 80; De två senare allokerar en byte och initierar den med värdet 80 ( P ). char * c = new char ( P ); Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 7/41 Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 8/41 ägarskap för resurser För dynamiskt allokerade objekt är ägarskap viktigt Ett objekt eller en funktion kan äga en resurs Ägaren är ansvarig för att avallokera resursen Om du har en pekare måste du veta vem som äger objektet den pekar på Ägarskap kan överföras vid funktionsanrop men måste inte var tydlig Varje gång du skriver new är du ansvarig för att någon kommer att göra delete när objektet inte ska användas mer. Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 9/41 Klasser RAII RAII Resource Acquisition Is Initialization Ett objekt initieras av en konstruktor Allokerar de resurser som behövs ( resource handle ) När ett objekt tas bort körs dess destruktor Frigör de resurser som ägs av objektet Vector: ta bort arrayen som elem pekar på class Vector private : double elem *; en array som inneh å ller själva vektorn int sz; storleken public : Vector ( int s) : elem new double [s], szs konstruktor ~Vector () delete [] elem ; destruktor, ta bort arrayen ; Manuell minneshantering Objekt allokerade med new måste tas bort med delete Objekt allokerade med new[] måste tas bort med delete[] annars fås en minnesläcka Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 10/41 Typiskt misstag: Att glömma allokera minne char namn [80]; * namn = Z ; Ok, namn allokerad på stacken. Ger namn [0]= Z char *p; Oinitierad pekare Ingen varning vid kompilering *p = Z ; Fel! Z skrivs till en slumpvis vald adress cin. getline (p, 80); Ger (nä stan ) garanterat exekveringsfel (" Segmentation fault ") eller minneskorruption misslyckad read_line char * read_line () char temp [80] ; cin. getline (temp, 80); return temp ; void exempel () char * namn = read_line (); char * ort = read_line (); cout << " Goddag " << namn << " från " << ort << endl ; " Dangling pointer ": pekare till objekt som inte lä ngre finns Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 11/41 Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 12/41
3 Delvis korrigerad version av read_line char * read_line () cin. getline (temp, 80); size_t len=strnlen (temp,80); char * res = new char [ len +1]; strncpy (res, temp, len+1); return res ; Dynamiskt allokerat ö verlever void exempel () char * namn = read_line (); char * ort = read_line (); cout << " Goddag " << namn << " från " << ort << endl ; Fungerar, men minnesläcka! Ytterligare korrigerad version av read_line char * read_line () cin. getline (temp, 80); size_t len=strnlen (temp,80); char *res = new char [len +1]; strncpy (res, temp, len+1); return res; Dynamiskt allokerat objekt överlever void exempel () char * namn = read_line (); NB! Anropande funktion blir ägare char * ort = read_line (); cout << " Goddag " << namn << " från " << ort << endl ; delete [] namn ; delete [] ort; Avallokera strängarna Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 13/41 Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 14/41 Använd std::string Felhantering Tre nivåer av felhantering: Enklare och säkrare med std::string # include <iostream > # include <string > using std :: cin ; void exempel () using std :: cout ; using std :: string ; cout << "Namn :"; string namn = read_line (); string read_line () cout << " Bostadsort :"; string ort = read_line (); string res ; getline (cin, res ); cout << " Goddag, " << namn << return res ; " fraan " << ort << endl ; std::string är en resource handle RAII Dynamiskt minne behövs sällan 1 Vidta lämplig åtgärd direkt för att möjliggöra fortsatt exekvering 2 Kategorisera och skicka vidare felet till någon annan programenhet, som förväntas hantera det 3 Identifiera felet, ge något felmeddelande samt låt därefter programmet krascha ( fail-fast, t ex assert) Nivå 2: exceptions (eller returvärde) Resurshantering : Heap-allokering: new och delete 7. Resurshantering, Felhantering 15/41 Felhantering : Exceptions 7. Resurshantering, Felhantering 16/41 Exceptionella händelser (exceptions, undantag ) Att generera exceptionella händelser Felhantering kan göras med throw och catch, (t.ex. vid indexering utanför gränser). Likt Java. Vid throw poppas aktiveringsposter från stacken tills en funktion som innehåller ett matchande catch hittas. Om ett exception inte fångas kommer programmet att krascha. (Programmet avslutas genom att terminate() anropas.) Standardklasser för exceptions: #include <stdexcept> Syntax för throw throw exceptionnamn (" Extra info "); throw invalid_argument (" till f2"); Felhantering : Exceptions 7. Resurshantering, Felhantering 17/41 Felhantering : Att generera exceptionella händelser 7. Resurshantering, Felhantering 18/41
4 Att generera exceptionella händelser Att generera exceptionella händelser Klassträd för klasserna i <stdexcept> length error Deklaration av egna undantag som subklasser logic error invalid argument out of range class communication_error : public runtime_error public : communication_error ( const string & mess = "") : runtime_error ( mess ) ; exception domain error Användning av egendeklararade undantag runtime error range error overflow error underflow error throw communication_error (" Checksum error "); Felhantering : Att generera exceptionella händelser 7. Resurshantering, Felhantering 19/41 Felhantering : Att generera exceptionella händelser 7. Resurshantering, Felhantering 20/41 Felhantering try Programkod där fel kan uppst å catch ( parameter av nå gon typ ) Kod som tar hand om denna typ av fel catch ( parameter av nå gon typ ) Kod som tar hand om denna typ av fel catch (...) Kod som tar hand om resten ( default ) Den första catch-sats som matchar typen väljs. Fånga subklasser före superklassen. int i; try cout << "Nästa tal? "; if (!( cin >> i)) break ; int r = f(i); cout << " Resultat : " << r << endl ; catch ( overflow_error ) cout << Resultat utanf ör giltigt område ); catch ( exception & e) Felhantering : 7. Resurshantering, Felhantering 21/41 Felhantering : 7. Resurshantering, Felhantering 22/41... och skicka vidare int i; try cout << "Nä sta tal? "; if (!( cin >> i)) break ; int r = f(i); cout << " Resultat : " << r << endl ; catch ( overflow_error ) cout << Resultat utanf ör giltigt omr åde ); catch ( exception & e) Fördefinierad funktion i klassen exception try do_something (); catch length_error & le) hantera length error catch out_of_range &) throw ; skicka vidare catch (...) default Felhantering : 7. Resurshantering, Felhantering 22/41 Felhantering : 7. Resurshantering, Felhantering 23/41
5 Resurshantering: destruktorer körs vid stack unwinding struct Foo int x; Foo ( int ix) :xix cout << " Foo (" <<x<<")\n"; ~ Foo () cout << "~ Foo (" <<x<<")\n"; ; void test (int i) Foo f(i); if(i == 0) throw std :: out_of_range ("noll?"); else Foo g (100+ i); test (i -1); cout << " after call to test (" << i -1 << ")\n"; int main () Foo f (42); try Foo g (17); test (2); catch (std :: exception & e) cout <<e. what ()<< endl ; Foo (42) Foo (17) Foo (2) Foo (102) Foo (1) Foo (101) Foo (0) ~ Foo (0) ~ Foo (101) ~ Foo (1) ~ Foo (102) ~ Foo (2) ~ Foo (17) noll? ~ Foo (42) Felhantering : 7. Resurshantering, Felhantering 24/41 Specifikation av exceptionella händelser i C++11 Nyckelordet noexcept anger om en funktion får lov att generera exceptions eller inte. Att inte ange något är samma som noexcept(false). I deklarationen av funktionen struct Foo void f(); void g() noexcept ; ; och i definitionen av funktionen # include <stdexcept > void Foo ::f() throw std :: runtime_error ("f failed "); void Foo ::g() noexcept throw std :: runtime_error ("g lied and failed "); Felhantering : Specifikation av exceptionella händelser 7. Resurshantering, Felhantering 25/41 Specifikation av exceptionella händelser Excempel på användning Specifikation av exceptionella händelser äldre C++, använd inte # include <typeinfo > for typeid void test_noexcept () Foo f; try f.f (); catch (std :: exception &e) try f.g (); catch (std :: exception &e) cout << " done \n"; St13runtime_error : f failed terminate called after throwing an instance of std :: runtime_error what (): g lied and failed I äldre C++ fanns händelselistor för en funktion: typerna för de händelser som kan genereras av funktionen specificeras med nyckelordet throw. Exempel på händelselista: int f( int ) throw (typ1, typ2, typ3 ) throw typ1 ("Fel av typ 1 har intr ä ffat "); throw typ2 ("Fel av typ 2 har intr ä ffat "); throw typ3 ("Fel av typ 3 har intr ä ffat "); Ingen lista Alla typer av händelser kan genereras Tom lista (throw()) Inga händelser kan genereras Felhantering : Specifikation av exceptionella händelser 7. Resurshantering, Felhantering 26/41 Felhantering : Specifikation av exceptionella händelser 7. Resurshantering, Felhantering 27/41 Tumregler för exceptions Static assert Tänk på felhantering tidigt i designen Använd specifika exception-typer, inte inbyggda typer. (använd inte throw 17;, throw false;, etc. ) Throw by value, catch by reference Om en funktion inte ska kasta exceptions, deklarera noexcept. Specificera invarianter för dina typer Konstruktorn säkerställer invarianten, eller kastar ett exception. Medlemsfunktioner kan lita på invarianten. Medlemsfunktioner måste upprätthålla invarianten. Vektor storleken ant är ett positivt heltal arrayen p pekar på är av storlek ant Om allokeringen av arrayen misslyckas kastas std::bad_alloc Om nånting kan kontrolleras vid kompilering, använd static_assert. Felhantering : Specifikation av exceptionella händelser 7. Resurshantering, Felhantering 28/41 constexpr int some_param = 10; int foo(int x) static_assert ( some_param > 100, " some_param too small "); return 2*x; int main () int x = foo (5); std :: cout << "x is " << x << std :: endl ; return 0; error : static assertion failed : some_param too small Felhantering : Static assert 7. Resurshantering, Felhantering 29/41
6 Dynamiskt minne, exempel Felhantering C++: Smarta pekare I standardbiblioteket <memory> finns två smarta pekare (C++11): void f(int i, int j) X* p= new X; allocate new X if(i <99) throw E ; may throw an exception if(j <77) return ; may return " early " p->do_something (); may throw delete p; Läcker minne om inte delete p anropas Smarta pekare 7. Resurshantering, Felhantering 30/41 std::unique_ptr<t> ensamt ägarskap std::shared_ptr<t> delat ägarskap som är resource handles : deras destruktor avallokerar objektet de pekar på. Andra exempel på resource handles : std::vector<t> std::string shared_ptr innehåller en referensräknare: när sista shared_ptr till ett objekt förstörs avallokeras objektet. Jfr. garbage collection i Java. Smarta pekare 7. Resurshantering, Felhantering 31/41 Smart pointer, exempel Smart pointer, exempel Dynamiskt minne behövs sällan void f(int i, int j) unique_ptr <X> pnew X; allocate new X and give to unique_ptr if(i <99) throw E ; may throw an exception if(j <77) return ; may return " early " p->do_something (); may throw delete p; Destruktorn för p körs alltid void f(int i, int j) X x1 ; X x2 ; if(i <99) throw E; may throw an exception if(j <77) return ; may return " early " x1. do_something (); may throw x2. do_something (); may throw Använd lokala variabler om möjligt Smarta pekare 7. Resurshantering, Felhantering 32/41 Smarta pekare 7. Resurshantering, Felhantering 33/41 read_line med unique_ptr read_line med unique_ptr helt utan explicita new och delete (c++14) unique_ptr <char []> read_line () cin. getline (temp, 80); int size = strlen ( temp )+1; char * res = new char [ size ]; strncpy (res, temp, size ); return unique_ptr <char []> res ; void exempel () unique_ptr <char []> namn = read_line (); unique_ptr <char []> ort = read_line (); cout << " Goddag " << namn.get () << " fraan " << ort.get () << endl ; unique_ptr <char []> read_line () cin. getline (temp, 80); int size = strlen ( temp )+1; auto res = std :: make_unique <char []> (size ); strncpy (res.get (), temp, size ); return res; För att få en char* används unique_ptr<char[]>::get(). Smarta pekare 7. Resurshantering, Felhantering 34/41 Smarta pekare 7. Resurshantering, Felhantering 35/41
7 Smarta pekare Vector från tidigare C++: Smarta pekare Tumregler för parametrar till funktioner: class Vector public : Vector ( int s) : elem new double [s], szs double & operator []( int i) return elem [i ]; int size () return sz ; private : std :: unique_ptr <double []> elem ; int sz; ; om ägarskap inte ska överföras Använd råa pekare Använd std::unique_ptr<t> const & om ägarskap ska överföras. Använd värdeanropad std::unique_pointer<t> (då måste man använda std::move()) Detta är bara en orientering om att smarta pekare finns. Råa pekare är så vanliga att ni måste lära er behärska dem. Smarta pekare 7. Resurshantering, Felhantering 36/41 Smarta pekare 7. Resurshantering, Felhantering 37/41 C++: Smarta pekare Grov sammanfattning Läsanvisningar Råa ( nakna ) pekare: Programmeraren ansvarar för allt Risk för minnesläckor Risk för dangling pointers Smarta pekare: Ingen (mindre) risk för minnesläckor (liten) Risk för dangling pointers om de används fel (t ex mer än en unique_ptr) Referenser till relaterade avsnitt i Lippman Arrayer 3.5, , (12.2.2) Exceptions 5.6, Dynamiskt minne och smarta pekare 12.1 unique_ptr (s ) Smarta pekare 7. Resurshantering, Felhantering 38/41 Smarta pekare 7. Resurshantering, Felhantering 39/41 Nästa föreläsning Klasser: resurshantering och polymorfism Referenser till relaterade avsnitt i Lippman Klasser, resurshantering 13.1, 13.2 Move semantics 13.6 Operatorer och typomvandling kapitel 14 Dynamisk poymorfism och arv kapitel Arv och resurshantering 15.7 Pekaren this s Smarta pekare 7. Resurshantering, Felhantering 40/41
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
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
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.
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. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser
Innehåll EDAF30 Programmering i C++ Resurshantering. Objektorientering. Klasser. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typdeklarationer och typomvandling 2 Resurshantering Stack-allokering Heap-allokering:
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
Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism
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
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Typomvandling 2 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv
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
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
Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33
Programmering i C++ EDA623 Typer EDA623 (Föreläsning 4) HT 2013 1 / 33 Typer Innehåll Heltalstyper Flyttalstyper Pekare Minnesallokering Funktionspekare Typdeklarationer med typedef Typomvandlingar (casting)
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
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
Innehåll. 1 volatile. 2 Kuriositeter. 3 Klasser och arv. 4 Råd och tumregler. 5 Mer om standard-containers. Trigraphs
Innehåll EDAF30 Programmering i C++ 12., kommentarer och råd 1 volatile 2 Kuriositeter Sven Gestegård Robertz Datavetenskap, LTH 2017 3 Klasser och arv Mer polymorfism 4 Råd och tumregler 5 Mer om standard-containers
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
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 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
Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33
Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
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
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
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
*:85/ID200V C++ HT07. Föreläsning 8 Medlemspekare Undantagshantering Namnrymder
*:85/ID200V C++ HT07 Föreläsning 8 Medlemspekare Undantagshantering Namnrymder Medlemspekare Ibland uppstår behovet att peka ut en viss medlem, som skall behandlas i olika objekt. C++ har begreppet medlemspekare
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.
Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
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
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Klas Arvidsson Institutionen för datavetenskap 1 / 33 UML UML är ett grafiskt språk som (bland mycket annat) används fö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.
Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java
Innehåll EDAF30 Programmering i C++ 1. Introduktion 1 Om kursen Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Presentation av C++ Historik Inledning Datatyper och variabler 1. Introduktion 2/1 Viktiga
Innehåll. Pekare Syntax
Innehåll EDAF30 Programmering i C++ Typer, pekare Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typer och arrayer Operatorn -> Typer, pekare 2/1 Påminner om referenser i Java, men en pekare är minnesadressen
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne
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
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.
Föreläsning 6: Metoder och fält (arrays)
TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker
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
C++ Objektorientering - Klasser. Eric Elfving
C++ Objektorientering - Klasser Eric Elfving 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med struct är åtkomst... 2 / 20 Följande
Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan
Vad är en klass? Övnin 2 Daens ämne är klasser och hur de hanteras. Vi kommer att bya upp ett exempel stevis och illustrera en hel del möjliheter, men också problem och saker man bör vara vaksam på. ffl
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
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne
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
Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
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
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
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34
Programmering i C++ EDAF30 Dynamiska datastrukturer EDAF30 (Föreläsning 11) HT 2014 1 / 34 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd Säkrare minneshantering (shared_ptr och unique_ptr)
Tillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap
C++ Objektorientering - Klasser Eric Elfving Institutionen för datavetenskap 1 / 23 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med
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
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
TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap
TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,
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
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
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
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
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
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
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel
Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av
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
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
Minnestilldelning (allokering) och frigörande (avallokering) av minne
Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på
Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016
Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.
Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar
Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden
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
Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis
TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00
TENTAMEN CD5250 Objektorienterad programutveckling med C++, 5p Max poäng: 40 Betygsgränser: 3: 20 4: 28 5: 36 Datum: 1999-06-01, Tid: 14:00-19:00 Ansvarig: Ivica Crnkovic Upp till 5 poäng kan komma från
Objektorienterad programmering
Objektorienterad programmering Föreläsning 7 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Konstanter och readonly Statiska klasser Standardklassen Math Parameteröverföring Referensen
Ö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++
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Må 24/10 och kan då hämtas på
Funktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
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
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Klasser Eric Elfving Institutionen för datavetenskap 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Föreläsning 2, vecka 8: Repetition
TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning
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
Första exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,
Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, 2003 09 11 Ronnie Johansson, rjo@nada.kth.se Vi kommer att titta på: Kompilering och länkning make och Makefile Preprocessordirektiv main() funktionen
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes
Tecken EDAF30 Programmering i C++ 2. Tecken och texter char char ch = A ; Sven Gestegård Robertz Datavetenskap, LTH 2015 sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char c1, c2; c1 = A ; c2
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner
732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (
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 + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
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
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 1 Daniel Aarno bishop@kth.se Översikt övning 1 Kompilering och länkning Makefile Preprocessordirektiv Funktioner Funktionen main() Datatyper Minneshantering Pekare
Objektorienterad programmering
Objektorienterad programmering Föreläsning 14 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Exceptionella händelser Vanliga Programfel Exception-klasser Automatiskt genererade
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6 Pontus Haglund och Gustav L'estrade anpassade slides av Klas Arvidsson Department of Computer and information science 1 Arv (Specialisering)
Arv bakgrund (kap. 9)
Föreläsning 4 Arv bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Kanin pälsfärg slaktvikt smutsa_ned() Katt pälsfärg smutsa_ned() klös_soffa() Arv bakgrund Många klasser delar på egenskaper
5 Arv och dynamisk bindning FIGUR
5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod
Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer
TDDC76 Programmering och datastrukturer
TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer