Vad är en mall och vilka är dess egenskaper? Övning 3. En funktionsmall
|
|
- Kurt Jonsson
- för 7 år sedan
- Visningar:
Transkript
1 Vad är en mall och vilka är dess eenskaper? Övnin 3 Daens övnin behandlar två ämnen: ffl mallar (en. templates). En mall kan ses som en avancerad form av makro, eller en avbildninar från listor av typer och konstanter till funktioner och klasser. ffl Gör det möjlit att e en enda typoberoende beskrivnin av en enerell funktionalitet. ffl det standardiserade mallbiblioteket (en. Standard Template Library (STL)). ffl Motverkar copy-paste -prorammerin och underlättar underhåll. Vi kommer att å ienom ett par exempel för varje företeelse. ffl Inen run-time -kostnad och trots det stark typnin. ffl Försvårar debuprocessen och ökar normalt kompilerinstiden. En funktionsmall Vårt första exempel på funktionsmall visar dels runderna i syntaxen och beränsninar i användninen, och dels nåra typer av automatisk konverterin som kan ske vid anrop. #include <alorithm> void printmin ( const U &a, const U &b ) f std ::cout << "Minimum of " << a << " and " << b << " is: " << std ::min ( a, b) << endl ; template <class T> void printvec ( T Λ s, int size ) f for ( int i = 0; i < size ; i++) f std ::cout << Λ(s + i) << "," ; std ::cout << endl ; int xi = 4, yi = 5; float xf = 4.35, yf = 3.79; char xc = a, yc = b ; char ac [] = "hej" ; printmin ( xi, yi ); // qualification printmin ( xf, yf ); // conversion printmin ( xc, yc ); // printmin ( xc, yf ); //!! different types printmin<int>(xi, yc ); // different types // OK, explicit! printvec ( ac, 3); // array > pointer // conversion >./a.out Minimum of 4 and 5 is: 4 Minimum of 4.35 and 3.79 is: 3.79 Minimum of a and b is: a Minimum of 4 and 98 is: 4 h,e,j,
2 Vad var det som hände? Ännu en funktionsmall Betrakta anropet printmin(xi, yi). 1. Vid anropet undersöker kompilatorn om det finns en template vid namn printmin. Det finns det. 2. Kompilatorn kollar sedan vad första parametern xi har för typ. Eftersom xi är en int så måste mallparametern U vara en int. 3. Eftersom samma mallparameter U används både för första och andra parametern mallen såmåste även yi vara en int, vilket den är. 4. Anropet örs till en konkret instansierin av mallen, som i sin tur har instansierat std::min. void printmin ( const int &a, const int &b ) f std ::cout << "Minimum of " << a << " and " << b << " is: " << std ::min ( a, b) << endl ; Följande exempel är tänkt att visa dels att en mall kan ta en icketypparameter och dels hur man kan välja en instansierin enom att e (delvisa) explicita mallparametrar vid ett anrop. template <int scale, class U, class V> double rectarea ( U lenth, V width ) f return scale Λ lenth Λ width ; int li = 3, wi = 4; float lf = 4.79, wl = 5.63; // partial explicit parameters std ::cout << "RA = "<< rectarea<4>(lf, wi) << endl ; // explicit parameters std ::cout << "RA = "<< rectarea <4, int, float>(li, wl) << endl ; Specialiserin av funktionsmall Följande exempel illustrerar hur en mall kan specialiseras och vad som skiljer specialiserade mallfunktioner från vanlia funktioner. #include <strin> U minimum ( U &a, U &b ) f if ( a < b ) f return a ; else f return b ; typedef char Λ pchar ; // specialization template <> pchar minimum<pchar>(pchar & a, pchar &b ) f if ( strcmp ( a, b ) < 0) f return a ; else f return b ; // function that matches template lon minimum ( lon a, lon b ) f if ( a < b ) f return a ; else f return b ; int xi = 2, yi = 3; lon xl = 5, yl = 7; char Λ xs = "Hejsan" ; char Λ ys = "Hoppsan" ; std ::cout << "min(" << xi << ", " << yi << ")=" << minimum ( xi, yi) << endl ; std ::cout << "min(" << xs << ", " << ys << ")=" << minimum ( xs, ys) << endl ; std ::cout << "min(" << xl << ", " << yi << ")=" << minimum ( xl, yi) << endl ;
3 En klassmall Låt oss öra en enkel stack med mallar som låter oss använda den för odtyckli typ. class Stack ; class StackNode f friend class Stack<U>; private : StackNode ( U v, StackNode Λ b ) : value ( v ), below ( b ) f StackNode () f StackNode Λ below ; U value ; ; class Stack f Stack () : top ( NULL ) f Stack () f while (!isempty () ) pop (); bool isempty () f return top == NULL ; Stack& put ( U v) f top = new StackNode<U>(v, top ); return Λ this ; U pop () f StackNode<U> Λtmp ; U value ; if (! isempty () ) f tmp = top ; top = top >below ; value = tmp >value ; delete tmp ; return value ; else f std ::cerr << "Error: empty stack!\n" ; exit (1); private : StackNode<U> Λtop ; ; Specialiserin Vår stack funerar dålit med stränar, varför? Låt oss specialisera den så att den funerar som det förväntas. template <> StackNode<char Λ > ::StackNode<char Λ >( char Λ v, StackNode<char Λ> Λb ) : below ( b ) f value = new char [ strlen ( v ) + 1]; strcpy ( value, v ); template <> StackNode<char Λ > :: StackNode<char Λ > () f delete [] value ; Klassmallar med förvalda värden på mallparametrar En skillnad mellan funktionsmallar och klassmallar är att de senare tillåter förvalda värden på mallparametrar, som dessutom kan bero på tidiare mallparametrar! template <class T1 = int, class T2 = T1, int size =10> class DBuffer f DBuffer () f first = new T1 [ size ]; second = new T2 [ size ]; DBuffer () f delete [] first ; delete [] second ; T1 Λ first ; T2 Λ second ; ;
4 Nyckelordet typename DBuffer<> b1 ; // 2x10 int DBuffer<float> b2 ; // 2x10 float DBuffer<lon, lon, 23> b3 ; // 2x23 lon DBuffer<lon, float, 23> b4 ; // 23 lon, // 23 float Det finns ett tillfälle när det är svårt för kompilatorn att avöra huruvida en rad är en deklaration eller en multiplikation. Då måste man använda nyckelordet typename. class A f class B f // either this ; int B ; // or this! ; template <class T> class C f typename T ::B Λ ptr ; // declaration T ::B Λ ptr ; // multiplication ; Kompilerinsprocessen med mallar C++ Standard Library Hör mallar hemma i.h-filer eller i.cpp-filer? I denna kurs placeras all mallkod i.h-filer. ffl Eentlien vore det trevlit med samma uppdelnin som vanlit. Dvs implementationen av en mall borde finnas i en.cpp-fil, och deklarationen borde finnas i en.h-fil. ffl Å andra sidan sker instansierin vid behov.därför måste inte bara deklarationen utan hela mallen finnas tillänli för kompilatorn. En nackdel med detta förfarande är att en instansierin kan upprepas om samma mallparametrar används ifleraolikakällkodsfiler som kompileras separat. Det finns dock flera svar påfråan. Intresserade studenter kan titta på onlinedocs/cc-3.3.1/cc/template- Instantiation.html#Template%20Instantiation. Standardbiblioteket tillhandahåller förstås en rad funktioner och trevlia livsförenklande saker för prorammerare och vi år ienom en liten del av detta. Detaljerad information hittar ni i Josuttis bok The C++ Standard Library, eller på webben Allt i standardbiblioteket är definierat i namnutrymmet (namespace) vid namn std, eller undernamnutrymmen till detta. Det betyder att man för att använda nåot ur biblioteket ör följande: 1. Inkluderar lämpli headerfil, tex #include <strin>. 2. Vid användandet skriver std::strin, usin std::strin;, eller använder usin namespace std; för att komma åt funktionaliteten.
5 auto ptr: Ett första exempel Största delen av standardbiblioteket utörsavthe Standard Template Library (STL). Detta är en flexibel samlin mallklasser och mallfunktioner, men ffl focus lier på effektivitet,ochintepå säkerhet ffl det har flera olika författare, vilket ör biblioteket spretit. Det krävs därför viss förståelse för att använda mer än det mest basala. auto ptr är en typ av intellient pekare. Iden är att auto ptr-objektet ser till att en pekare blir delete:ad när dess destruktor körs. #include <memory> class A f A ( int v ) : value ( v ) f int value ; ; // without auto_ptr void foo () f A Λ ap = new A (4); delete ap ; // with auto_ptr void bar () f auto_ptr<a> ap ( new A (4)); auto ptr: Överförin av äande Varje auto ptr-objektpekarantinen på ettobjekt eller null. Prorammeraren måste även se till att varje objekt pekas på avhöst ett auto ptr-objekt. Vid tilldelnin eller kopierin överförs äandet av en pekare. Använd const-deklarerin för att förhindra tilldelninar och körnin av kopierinskonstruktorn. #include <memory> #include <strin> #include <cstddef> usin namespace std ; class Person f strin Λ name ; strin Λ persnr ; Person ( char Λ na, char Λ no ) ; : name ( new strin ( na )), persnr ( new strin ( no )) f cerr << "Person(char *) for " << Λname << std ::endl ; Person () f cerr << " Person() for " << Λname << std ::endl ; delete name, delete persnr ; const strin prnt ( const auto_ptr<person> &ap ) f if ( ap. et () == NULL ) f return "NULL" ; else f return Λ ( ap >name ); auto_ptr<person> ap1 (
6 new Person ( "Lars", "801109" )); auto_ptr<person> ap2 ( new Person ( "Olle", "811012" )); cout << "ap1: " << prnt ( ap1 ) << ", ap2: " << prnt ( ap2) << std ::end ap2 = ap1 ; cout << "ap1: " << prnt ( ap1 ) << ", ap2: " << prnt ( ap2) << std ::end auto_ptr<person> ap3 ( ap2 ); cout << "ap2: " << prnt ( ap2 ) << ", ap3: " << prnt ( ap3) << std ::end auto ptr: Medlemsvariabler Ett viktit användninsområde för auto ptr är för att förhindra minnesläckor. I föreående exempel örs en farli konstruktion i detta hänseende. Vilken? Nedan illustrerar vi hur sådana farliheter kan undvikas enkelt med auto ptr. #include <memory> #include <strin> #include <cstddef> usin namespace std ; >./example8 A(char *) for Lars A(char *) for Olle ap1: Lars, ap2: Olle A() for Olle ap1: NULL, ap2: Lars ap2: NULL, ap3: Lars A() for Lars // with auto_ptr members class APPerson f private : const auto_ptr<strin> name ; const auto_ptr<strin> persnr ; APPerson ( char Λ na, char Λ no ) auto ptr: Varninar : name ( new strin ( na )), persnr ( new strin ( no )) f cerr << "APPerson(char *) for " << Λname << std ::endl ; APPerson () f cerr << " APPerson() for " << Λname << std ::endl ; ; APPerson x ( "Stefan", "790506" ); ffl Tyvärr funkar auto ptr ej för arrays. Varför? // What is the semantics of this? void foo () f auto_ptr<char> vec ( new char [ 10]); ffl Flera auto ptr-objekt får inte initieras med samma pekare. Om man ör det så kommer det först destruerade auto ptr-objektet delete:a det emensamt äda objektet. ffl Det finns andra sätt att tillverka smarta pekare som räknar antalet referenser till objekt. Detta kan ses som en beränsad form av skräphanterin. auto ptr skall ej förväxlas med detta.
7 Standard Template Library (STL) Funktionaliteten i STL är iven som mallar. Detta har fördelen att biblioteket blir extremt flexibelt. Mallarna kan sammanfattas enlit följande: ffl Containers Seqence containers Λ vector - Dynamisk array. Snabb tilldelnin med index, lånsam raderin och insättnin på odtyckli plats. Växer automatiskt på slutändan. Λ deque - dubbelriktad kö. Liknar vector fast växer i båda ändarna. Λ list - dubbellänkad lista. Snabb insättnin och raderin på odtyckli plats, lånsam åtkomst med index, men lätt att traversera. Λ strin - Dynamiska stränar med extra fluff (tänk på Java-klassen Strin). Är eentlien inte en container, men kan ses som en sådan. Associative containers Λ set/multiset - balanserat binärt träd av elementen. Inen direkt förändrin av elementen (inen direkttillån) och iteratorer returnerar const referenser. Varför? Λ map/multimap - balanserat binärt träd av par sorterat påförsta elementet i varje par. I övrit unefär som set/multiset. Container adapters and special classes Λ queue - klassisk FIFO. Stoppa in element och plocka ut dem i omvänd ordnin. Λ stack - klassisk LIFO. Stoppa in element och plocka ut dem i samma ordnin. Λ priority queue - ordnad kö. Stoppa in element och plocka ut dem i prioritetsordnin. Λ bitset - kompakt hanterin av stora mänder bitflaor. ffl Iterators Bidirectional iterator kan flyttas både framåt med ++ och bakåt med --. Finns hos list,set/multiset och map/multimap. Random access iterator har en sorts pekararitmetik förutom ++ och --. Finns hos vector, deque och strin. Iterator adapters tillför specialfunktionalitet, som reverse iterators, insert iterators, stream iterators. ffl Alorithms Modifyin alorithms (funkar ej med associativa containers) tex transform förändrar varje element på nåot sätt. Removin alorithms (funkar ej med associativa containers) tex unique tar bort identiska element när de lier efter varandra. Mutatin alorithms (funkar ej med associativa containers) tex reverse byter ordnin på elementen. Sortin alorithms tex sort sorterar elementen med quicksort. Förutom detta finns det en del hjälpklasser av olika sla. Nonmodifyin alorithms tex find hittar första förekomsten av ett värde.
8 Exempel: deque #include <deque> #include <alorithm> usin namespace std ; deque<int> c ; c. assin (2, 0); c. erase ( b ); b += 2; c. insert ( b, 111); b += 2; c. erase ( b ); for ( int i = 1; i < 5; i++) f c. push_back ( i ); c. push_front ( i Λ 10); copy ( c. bein (), c. end (), ostream_iterator<int>(cout, ", " )); cout << std ::endl ; deque<int >::iterator b = c. bein (); c. pop_back (); c. pop_front (); copy ( c. bein (), c. end (), ostream_iterator<int>(cout, ", " )); cout << std ::endl ; b += 3; Exempel: list, reverse, transform #include <list> #include <alorithm> #include <strin> #include <cctype> #include <functional> usin namespace std ; void pl ( list<strin> &l ) f copy ( l. bein (), l. end (), ostream_iterator<strin>(cout, " ")); cout << std ::endl ; class strintoupper : public unary_function<strin, strin> f strin operator () (strin s ) const f transform ( s. bein (), s. end (), s. bein (), toupper ); ; return s ; list<strin> l ; l. push_back ( "small" ); l. push_back ( "letters" ); l. push_back ( "is" ); l. push_back ( "nice" ); pl ( l ); reverse ( l. bein (), l. end ()); pl ( l ); transform ( l. bein (), l. end (), l. bein (), strintoupper ()); l. pop_back (); l. push_back ( "LARGE" ); l. pop_front (); l. push_front ( "NICER" ); reverse ( l. bein (), l. end ()); pl ( l );
9 Exempel: map, iterator och for-loopar #include <map> #include <strin> usin namespace std ; typedef map<strin, strin> ssmap ; ssmap l ; l [ "lasse" ] = "Lars Johnsson" ; l [ "eva" ] = "Eva Carlsson" ; l [ "steffo" ] = "Stefan Persson" ; l [ "soffan" ] = "Sofie Nilsson" ; // note that we use!= and ++b for ( ssmap :: const_iterator b = l. bein (); b!= l. end (); ++b ) f cout << b >first << ", " << b >second << std ::endl ;
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
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)
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 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
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
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
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
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
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. 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. 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
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
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. 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
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
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
Kapitel 4 - Mallar. Kapitel 4. Introduktion till mallar STL. 2D1387 Programsystemkonstruktion med C++ 1
Kapitel 4 Introduktion till mallar STL 2D1387 Programsystemkonstruktion med C++ 1 Kapitel 4 - Klassmallar, funktionsmallar och STL Funktionsmallar Klassmallar Mallar för medlemmar Specialisering Standardbiblioteket
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)
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
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
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,
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
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
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
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
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
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
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
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
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
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
Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31
Programmering i C++ EDA623 Dynamiska datastrukturer EDA623 (Föreläsning 11) HT 2013 1 / 31 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd EDA623 (Föreläsning 11) HT 2013 2 / 31 Länkade
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
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
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
Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..
Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private
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.
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)
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
Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor
Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.
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
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
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 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
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.
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
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
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
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
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
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
ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack
Stack och Kö -Implementering - Tilllämpningar ADS : STACK Det finns ett par vanligt förekommande ADT:er för samlingar av element som egentligen är specialfall av listor. En av dem är Stack Definition:
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
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(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.
Arrayer. results
Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1
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
Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer
Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num
Ö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++
7 Templates och Exceptions
7 Templates och Exceptions I senare versioner av C++ har man infört templates eller typparametrisering och exceptions eller undantagshantering. Med hjälp av templates eller typparmetrisering kan man skriva
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
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
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
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig
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
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack
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
Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista
Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och
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
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
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
1 Namnkontroll (NameControl)
1 Namnkontroll (NameControl) När en ny variabel, ett objekt, en konstant o s v introduceras måste programmeraren namnge denna. Allting identifieras m h a namn. När ett program består av väldigt många komponenter
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
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
Föreläsning 2. Länkad lista och iterator
Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF
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..........................................
Föreläsning 8: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och
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:
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
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
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.
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
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
maxlist-1. Indexerad lista Länkad lista
Datorer och programmering TDB2: Lista - en dynamisk datastruktur Eva Pärt-Enander Vad är en lista? En lista är en sekventiell struktur oftast av likadana saker. Listor denieras i C++ ofta med hjälp av
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
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
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
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
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
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
Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.
Föreläsning 11 Arrayer Arrayer Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt int[] tal = new int[3]; Kan ha en array av t.ex: Heltal (int) Tecken (char) Personer (objekt av klassen
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
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
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,
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:
Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad
1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen
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