Föreläsning 5-7 Operatoröverlagring
|
|
- Stefan Lindström
- för 6 år sedan
- Visningar:
Transkript
1 *: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 vid överlagring göras till medlemsfunktioner: tilldelningsoperatorer = += -= *= osv indexeringsoperatorn [] anropsoperatorn () medlemsåtkomst via pekare -> Övriga överlagringsbara operatorer kan göras till medlemsfunktioner eller till funktioner utanför klassen Bild 78 1
2 Operatoröverlagring Exempel för OH-bilderna: antag följande klass för representation av klockslag eller tidsåtgång: class Klocka{ Klocka(int m=0) : min(m){ // Default-ktor Klocka(int h, int m) : min(h*60+m){ int timme() const { return min / 60; int minuter() const { return min % 60; int totmin() const { return min; private: int min; ; Exempel som löses på föreläsningen: i en del tillämpningar (speciellt sådana som har att göra med kryptering) behöver man hantera heltal som är mycket större än vad som kan representeras med inbyggda heltalstyper. Skapa en klass vars objekt beter sig som heltal utan förtecken (unsigned) av obegränsad storlek. Vi begränsar oss till additionsoperatorer för dessa heltal. Bild 79 Operatoröverlagring forts. Vi kan definiera t.ex. följande funktioner: const Klocka operator+(const Klocka& k1, const Klocka& k2){ return Klocka(k1.totmin()+k2.totmin()); const Klocka operator+(const Klocka& k, int i){ return Klocka(k.totmin()+i); inline const Klocka operator+(int i, const Klocka& k){ return k+i; // Anropar bara ovanstående operator+ int operator-(const Klocka& k1, const Klocka& k2){ return k1.totmin()-k2.totmin(); Obs att det är biblioteksskaparens uppgift att se till de vanliga reglerna för operatorerna gäller, t.ex. att additionen är kommutativ (kan man göra kl + 3 så borde man kunna göra 3 + kl) Att returtypen för de operatorer som returnerar Klocka-objekt deklareras som const Klocka beror på att man vill se det returnerade objektet som ett värde, inte som ett lvalue (tilldelningsbart objekt). Bild 80 2
3 Operatoröverlagring - medlem eller fri funktion Operatorer som görs som medlemsfunktioner har som sin vänstra operand objektet självt och deklareras med en operand mindre. De har tillgång till objektets privata data. Operatorer vilkas vänstra operand är av en annan typ kan inte göras så. class Klocka { int min; int totmin() const{ return tot_minuter; const Klocka operator+(const Klocka& k) const; ; const Klocka Klocka::operator+(const Klocka& k) const { return Klocka(min + k.min); Operatorer som görs utanför klassen deklareras med alla sina operander som argument. De har inte tillgång till objektets privata data (kan lösas med frienddeklarationer): const Klocka operator+(int min, const Klocka& k){ return Klocka(min + k.totmin()); Bild 81 Relationsoperatorer Det vore ju bra om två klockslag kunde jämföras - detta kräver definition av jämförelseoperatorer med Klocka-operander. Obs att ingen operator genereras automatiskt (utom tilldelningsoperatorn): att man definierat operator== betyder inte att operator!= är definierad (se dock nästa bild). bool operator==(const Klocka& k1, const Klocka& k2){ return k1.timme()==k2.timme()&&k1.minuter()==k2.minuter(); inline bool operator!=(const Klocka& k1, const Klocka& k2){ return!(k1 == k2); Obs att det är en god vana att använda redan definierade operatorer vid definition av en ny operator (om det går). På detta sätt försäkrar man sig om att operatorernas semantik är konsekvent och underlättar ev. modifieringar. Vidare: bool operator<(const Klocka& k1, const Klocka& k2){ return k1.timme()<k2.timme() k1.timme() == k2.timme() && k1.minuter()<k2.minuter(); bool operator<=(const Klocka& k1, const Klocka& k2){ return k1 < k2 k1 == k2; Bild 82 Och så vidare 3
4 To the rescue - mallar från std I standardbiblioteket finns mallar för relationsoperatorer definierade m.h.a. operator== och operator< Om dessa definitioner duger behöver man alltså bara definiera dessa två operatorer och inkludera mallarna. Tillgängliga genom #include <utility>, finns i namnrymden std::rel_ops template <class T> inline bool operator!=(const T& x, const T& y) { return!(x == y); template <class T> inline bool operator>(const T& x, const T& y) { return y < x; template <class T> inline bool operator<=(const T& x, const T& y) { return!(y < x); template <class T> inline bool operator>=(const T& x, const T& y) { return!(x < y); Bild 83 Konverteringsoperationer Vad skulle kompilatorn säga om följande sats (med endast de hittills visade operatorerna och om kl är ett objekt av typen Klocka): if (kl < 50) Jo, det går hur bra (eller dåligt, beroende på vad man vill) som helst. Kompilatorn försöker hitta en operator<(klocka&, int), hittar ingen sådan men hittar en operator<(const Klocka&, const Klocka&) och dessutom en Klocka::Klocka(int), d.v.s. den kan konvertera en int till en Klocka (skapa temporärt objekt) och utföra operationen. Vill man förbjuda detta kan man deklarera Klocka konstruktorn som explicit. Går det då att göra tvärtom (använda Klocka där en int förväntas), t.ex.: int m = kl; Nej, kompilatorn vet inte hur man konverterar Klocka till int. Om detta är önskvärt (mycket tveksamt, se det bara som syntaktiskt exempel) kan man definiera en konverteringsoperator till int i klassen Klocka (se nästa bild). Bild 84 4
5 Konverteringsoperatorer En konstruktor kan användas för att konvertera från en annan typ till denna klass (explicit eller implicit), t.ex. från int till Klocka Om man vill ange hur ett objekt av klassen kan konverteras (explicit eller implicit) till en annan typ kan man utrusta klassen med en konverteringsoperator, vars namn är typen man skall konvertera till och som deklareras utan returtyp: class Klocka{ int min; explicit Klocka(int m=0):min(m){ operator int() { return min; ; Detta gör att ett Klocka-objekt accepteras där en int förväntas. Explicit konvertering till int av Klocka kl görs med int(kl). Explicit konvertering av int i till Klocka kan fortfarande göras med Klocka(i). Implicit konvertering av int till Klocka är nu förbjuden (kompileringsfel). Obs att man inte kan ha båda: om konstruktorn som tar en int inte vore explicit får man tvetydighet vid behov till implicit konvertering, båda konverteringarna duger lika bra! Bild 85 Uppdateringsoperatorer För typer där både tilldelningsoperatorn och vanliga binära operatorer (t.ex. binär +, binär - o.s.v.) är definierade förväntar sig användare att även uppdateringsoperatorer (+=, -= o.s.v.) kan användas. Dessa borde alltså också definieras. Vår klass Klocka har ju den automatiskt genererade tilldelningsoperatorn och så har vi definierat operatorerna operator+ med en annan Klocka och med int samt operator- med en annan Klocka. Alltså borde vi definiera motsvarande += resp. -= Sådana operatorer måste göras som medlemsfunktioner. Eftersom de ändrar det egna objektet kan de inte deklareras som const. Eftersom de skall returnera det tilldelade värdet (de borde ju bete sig som andra likadana operatorer) så brukar man returnera en referens till objektet självt, men som en const-referens så att returen inte skall vara tilldelningsbar. För att återanvända redan implementerade operationer brukar man definiera uppdateringsoperatorn först och sedan använda den i definitionen av motsvarande binära operator (se nästa bild). Bild 86 5
6 Exempel på uppdateringsoperatorer class Klocka{ int min; const Klocka& operator+=(const Klocka&); const Klocka operator+(const Klocka&) const; ; const Klocka& Klocka::operator+=(const Klocka& other){ min += other.min; return *this; const Klocka Klocka::operator+(const Klocka& other) const{ Klocka resultat = *this; resultat += other; return resultat; Bild 87 Konstigheter med ++ och -- För typer där det finns tilldelning samt addition och subtraktion förväntar sig användare att det även finns ++ och --. Inkrementeringsoperatorn ++ och dekrementeringsoperatorn -- finns ju i två varianter: prefix och postfix. I dessa två varianter har de olika semantik men samma signatur. På något sätt måste man ange i deklarationen av dem vilken som är prefix och vilken som är postfix. Detta görs genom att postfix-operatorerna utrustas i deklarationen (och definitionen) med ett extra dummy int-argument som varken används eller ens namnges (!). Prefix-operatorerna borde returnera objektet självt som en const-referens. Postfix-operatorerna kan inte göra det - de skall ju returnera värdet innan förändringen. De bör alltså skapa ett nytt objekt och returnera det (alltså objektet, inte en referens). class Klocka{ int min; const Klocka& operator++() { // Prefix return *this += 1; const Klocka operator++(int) { Klocka tmp(*this); *this += 1; return tmp; // Postfix Bild 88 6
7 Överlagring av operator() Om man deklarerar anropsoperatorn operator() i en klass så innebär det bara att man kan anropa denna operator genom att skriva parenteserna med eventuella argumentvärden efter ett objektnamn. Denna operator är den enda där antalet argument inte är bestämt av språkdefinitionen. class Exempel { string str; Exempel(string s):str(s) { void operator()(int x, string mer){ cout << str << mer << x << endl; ; int main(){ Exempel ex( Karl ); ex(16, Gustav ); // Anropar operator() Bild 89 operator(), användning - funktionsobjekt Den viktigaste användningen av överlagrad anropsoperator är för skapande av s.k. funktionsobjekt (funktorer), d.v.s. objekt som omsluter en funktion och kan användas som en funktion för skickas till andra funktioner som argument (istället för funktionspekare). Exempel: i standardbibliotekets headerfil <algorithms> finns bl.a. följande funktionsmall motsvarande våra doforall-funktioner från moment *:58 (obs! förenklad här!): template <class Iter, class Oper> void for_each(iter first, Iter last, Oper doit) { for ( ; first!= last; ++first) doit(*first); Exempel på användning: void show_one(int value) { cout << value; int main(){ vector<int> vec; // Fyll vec med värden på nå t sätt for_each(vec.begin(), vec.end(), show_one); Endast orinentering, återkommer vid genomgång av STL Bild 90 7
8 Funktionsobjekt, exempel, forts. Antag att vi ofta behöver öka alla element i vektorn med samma värde, men detta värde är olika vid olika tillfällen. En funktion som skulle kunna skickas till for_each för att göra detta behöver ta två argument: en referens till elementet som ska ökas och värdet som ska adderas men for_each anropar funktionen med endast elementet Genom att istället för en funktionspekare skicka ett objekt av en struct som omsluter funktionen kan detta objekt även innehålla värdet som funktionen ska använda - vi skickar en funktion med en liten omgivning: struct Add{ int talet; Add(int tal):talet(tal){ void operator()(int& elem){ elem += talet; ; int main(){ vector<int> vec; // Fyll vec med värden for_each(vec.begin(), vec.end(), Add(5)); I for_each-anropet skapas ett temporärt objekt av Add och värdet 5 lagras i objektet, detta objekt används av for_each som en funktion. Bild 91 operator(), användning - indexering med flera index Eftersom operator() är den enda där antalet argument inte är bestämt av språkdefinitionen används den ofta även där indexeringsoperatorn egentligen borde användas, men där man vill ha flera index. Exempel: class Matrix { int rows, cols; int *data; Matrix(int r, int c): rows(r), cols(c), data(new int[rows * cols]){ ; int& operator()(int r, int c){ return data[r * cols + c]; int main(){ Matrix mat(10, 30); mat(3, 5) = 177; Bild 92 8
9 Överlagring av operator[] Indexeringsoperatorn operator[] brukar överlagras i klasser som fungerar som en datasamling, den brukar ge åtkomst till ett element i datasamlingen identifierat med ett värde (ofta ett heltalsindex, men det är inte nödvändigt). Den ska ha ett argument. I icke-const-objekt borde den returnera ett lvalue (alltså en referens) så att den ska kunna användas både för avläsning av elementvärdet och för tilldelning till elementet. Brukar även överlagras med en const-variant som returnerar ett värde. class Text{ int siz; char *cptr; char& operator[](int index){ return cptr[index]; char operator[] (int index) const { return cptr[index]; ; Bild 93 Exempel: matris med vanliga indexeringsoperatorer Det vanliga sättet att indexera i en matris i C-liknande språk är med dubbel indexering: mat[3][5] = 177; Här är det alltså resultatet av den första indexeringen som indexeras i sin tur. För att åstadkomma detta får vi införa en extra klass eller struct som returneras som resultat av den första indexeringen: class Matrix { int rows, cols; int *data; struct Col{ Matrix& mx; int r; Col(Matrix& m, int rr):mx(m), r(rr){ int& operator[](int c) { return mx.data[r*mx.cols+c]; ; Här har vi ett exempel på en nästlad struct. Obs! skillnad mot Javas inre klasser! Objekt av en nästlad struct eller klass i C++ ligger inte inom sitt omgivande objekt. Matrix(int r, int c): rows(r), cols(c), data(new int[rows * cols]){ Col operator[](int r){ return Col(*this, r); ; Bild 94 9
10 operator[], skilja på avläsning och tilldelning Ibland vill man använda använda operator[] för åtkomst, men måste göra operationerna avläsning resp. tilldelning på olika sätt. Man kan då från operator[] returnera ett temporärt objekt av en privat inre klass med en konverterings- och en tilldelningsoperator. Exempel: en klass som beter sig som en bitvektor med indexering till ensklida bitar(!) class Bitvector{ unsigned long bits; struct Bref{ unsigned long& b; int pos; Bref(unsigned long& bb, int p):b(bb), pos(p){ operator bool() const { return b & (1ul << pos); bool operator=(const bool v) { if (v) b =1ul<<pos; else b&=~(1ul<<pos); ; Bitvector():bits(0){ Bref operator[](int pos){return Bref(bits, pos); ; Bild 95 Överlagring av operator-> operator-> har lite speciellt beteende: den skall returnera en pekare eller en referens till ett objekt av en klass som också överlagrar denna operator. Om returtypen är en pekare så avrefereras pekaren och åtkomst görs till den angivna medlemmen i det utpekade objektet (som om klassen som överlagrar operatorn själv var en pekare). Om returtypen är en referens till ett objekt av en klass som också överlagrar operator-> så anropas denna operator och mekanismen tillämpas rekursivt tills en pekare returneras, varefter pekaren avrefereras och medlemsåtkomsten görs. Överlagrad operator-> måste vara implementerad som medlem i klassen. Med hjälp av överlagring av operator-> (ofta i kombination med den unära operator*) kan man skapa klasser som beter sig som pekare men kan utföra kontroller, minneshantering osv (s.k. smarta pekare). Behållarklassernas iteratorer utgör ett exempel på sådana klasser. Bild 96 10
11 Pekarklasser Vid byggande av bibliotek av klasser där det är meningen att tillämpningar skall skapa objekten dynamiskt kan man underlätta hanteringen av objektavallokering genom att även skapa klasser vilkas objekt beter sig som pekare men som kontrollerar de utpekade objektens liv genom att när det är dags avallokera dem. Vad som är lämplig tidpunkt för avallokering varierar med situationen varför det har varit svårt att skapa bibliotekskomponenter för detta. På nästa bild finns det en skiss på en sådan klass för hantering av objekt av en klass Person. Klassen Ptr låtsas vara en pekare, den skulle kunna användas i en tillämpning enligt följande: void funk(){ Ptr p=new Person( Jozef ); cout << p->getname(); // åtkomst till medlem i utpekat objekt Person annan(*p); // avreferering ger det utpekade objektet // funktionen slut, p städas bort och i sin destruktor tar bort utpekat objekt Bild 97 Exempel: klass som simulerar pekare class Person{; class Ptr{ Person *ptr; // info om utpekade objektets status Ptr(Person *p): ptr(p){ /* uppdatera status */ Ptr(Ptr& other):ptr(other.ptr){/* uppdatera status */ Ptr& operator=(const Ptr& other){ /* updatera status */ ~PersPtr(){ if (/* skall bort */) delete ptr; ; Person& operator*() { return *ptr; Person* operator->() { return ptr; bool operator==(const Ptr& other) const; bool operator!=(const Ptr& other) const; Bild 98 11
12 Referensräkning En lösning som duger i många situationer är pekarklasser som håller reda på hur många pekarobjekt som pekar ut samma objekt och som städer bort objektet när det sista pekarobjektet försvinner: class Person; class Ptr { Person *ptr; int *count; // Räknare som pekarobjekten till samma obj. delar på Ptr(Person *pek=0); Ptr(const Ptr& other); ~Ptr(); Ptr& operator=(const Ptr& other); Person& operator*() const { return *ptr; Person* operator->() const { return ptr; bool operator==(const Ptr& other) const; bool operator!=(const Ptr& other) const; ; Bild 99 Referensräkning - implementering av medlemsfunktioner Ptr::Ptr(Person *pek) : ptr(pek), count((pek)? new int(1) : 0){ Ptr::Ptr(const Ptr& other) : ptr(other.ptr), count(other.count){ if (ptr) (*count)++; Ptr::~Ptr(){ if (ptr && --*count == 0){ delete count; delete ptr; bool Ptr::operator==(const Ptr& other) const{ return ptr == other.ptr; bool Ptr::operator!=(const Ptr& other) const{ return ptr!= other.ptr; Bild
13 Referensräkning - implementering av tilldelning Ptr& Ptr::operator=(const Ptr& other){ if (ptr!= other.ptr){ if (ptr && --*count == 0){ delete count; delete ptr; ptr = other.ptr; count = other.count; if (ptr) ++*count; return *this; Användning av denna pekarklass förutsätter att användaren har disciplinen att inte använda vanliga pekare - vår Ptr kan ju inte veta hur många vanliga pekare som pekar ut de utpekade Person-objekten. Detta kan underlättas genom att vid objektskapande påtvinga användning av en funktion som returnerar ett Ptr-objekt. Bild 101 Person-klassen för referensräkning Genom att göra konstruktorn privat och skapa en publik statisk medlemsfunktion som skapar ett objekt dynamiskt och returnerar ett Ptr-objekt kan man se till att tillämpningar inte kan skapa objekt på annat sätt: class Person{ string namn; int nummer; Person(string na, int nu):namn(na), nummer(nu){ static Ptr create(string na, int nu); string get_namn() const { return namn; int get_nummer() const { return nummer; ; // Person Ptr Person::create(string na, int nu){ return Ptr(new Person(na, nu)); Objektskapande funktioner brukar kallas fabriksfunktioner (factory functions) Tekniken med privat konstruktor och en objektskapande statisk medlemsfunktion (eller friend-funktion) brukar kallas the named constructor idiom. Bild
14 Person-klassen för referensräkning, forts. Om man verkligen vill försäkra sig om att Person-objekten bara skapas på heapen och hanteras genom Ptr-objekt bör man även förbjuda kopiering av Person-objekt och adresstagning för dem: class Person{ // som tidigare Person(const Person& other); Person *operator&(); const Person *operator&() const; // som tidigare ; // Person Detta brukar göras genom att man deklarerar copy-konstruktorn och adresstagningsoperatorer (för icke-const-resp. const-objekt) som privata och utan definition (det senare dels för att definitionen är onödig, dels för att det skyddar mot att man använder dessa operationer själv i klassen Person - ger då länkningsfel). Eftersom detta kan behöva göras för många klasser brukar man definiera ett preprocessormacro för sådana deklarationer. Bild 103 Standardbibliotekets auto_ptr<> Standardbiblioteket tillhandahåller i <memory> mallen för en pekarklass kallad auto_ptr<>. Semantiken för denna klass är att ett auto_ptr<>-objekt äger det utpekade objektet och tar bort det i sin destruktor. Vid kopiering och tilldelning överförs ägarskapet till det nya auto_ptr<> och det gamla sätts att peka på NULL. Det är alltså endast det senast tilldelade eller konstruerade auto_ptr<> som pekar ut objektet. Detta gäller även vid värdeöverföring som argument eller vid värderetur från funktioner. auto_ptr<> kan inte användas i situationer där flera pekare kan tänkas peka ut samma objekt, t.ex. i behållare. auto_ptr<>s användningsområde är för situationer då dynamiska objekt skapas, används och skall städas bort i funktioner som kan avbrytas av undantag. Bild
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
Läs merOperatorö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 + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
Läs merInnehå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
Läs merTDIU20 - 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
Läs merTentamen *: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
Läs merFöreläsning 4 Tillägg till C-syntaxen
*:85/ID200V C++ HT07 Föreläsning 4 Tillägg till C-syntaxen Några småsaker Resten-av-raden -kommentarer // (som i Java) Datatypen bool med värdena false och true, implicit kompatibel med int (d.v.s. int-värden
Läs merInnehå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
Läs merProgrammering 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
Läs merInnehå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
Läs merLektionsuppgifter. 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..........................................
Läs mer2D1387, 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
Läs merProgrammering 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
Läs merProgrammering 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
Läs merInnehå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
Läs merDel3 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
Läs merSynlighet. 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
Läs merTDIU01 - 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
Läs merKapitel 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
Läs merTillä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
Läs merDD2387 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
Läs merProgramsystemkonstruktion 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
Läs merDel2 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
Läs merTDDC76 - 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
Läs merKlasser. 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
Läs merTDIU01 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
Läs merProgramsystem 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
Läs mer*: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
Läs merSP: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
Läs merC++-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
Läs merProgrammering 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)
Läs merByggstenar. 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
Läs merInnehå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
Läs merTDIU01 - 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
Läs merInnehå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
Läs merIntroduktion. 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
Läs merInnehå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
Läs merInnehå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
Läs merTommy 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
Läs merPekare och arrayer. Indexering och avreferering
Pekare och arrayer En array är ett sammanhängande minnesområde rymmande ett antal element av en viss typ. Arraynamnet kan ses som adressen till arrayens början, dvs. dess första element. En pekare är en
Läs merÖ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++
Läs merInnehå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.
Läs merObjektorientering - 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
Läs merProgrammera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Läs mer2D1387, 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
Läs merTDDC76 - 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.
Läs merFunktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare
Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.
Läs merDatatyper 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
Läs merKapitel 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
Läs merTDIU01 - 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
Läs merDynamisk 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
Läs mer2D1387 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.
Läs merInnehå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äs merLite 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
Läs merTentamen 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
Läs merAlgoritmbiblioteket (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,
Läs merFöreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Läs merFöreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc
Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp
Läs merFö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
Läs merProgramsystemkonstruktion 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
Läs merKapitel 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
Läs merStandard 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
Läs merKapitel 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
Läs merInnehå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
Läs merallokeras på stacken dynamiskt new delete
Minneshantering Lokala objekt allokeras på stacken och har kort livslängd Objekt med längre livslängd måste allokeras dynamiskt på heapen (free store) Dynamisk allokering görs med new och delete Statiska
Läs merInnehå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
Läs merTDIU20 - Objektorienterad programmering i c++ - föreläsning 3
TDIU20 - Objektorienterad programmering i c++ - föreläsning 3 Pontus Haglund Department of Computer and information science 1 Vad har vi gjort hittills 2 Felhantering 3 Operatorer 4 binära operatorer 5
Läs merMinneshantering. Minneshantering. Minneshantering. Undvik pekare
Minneshantering Lokala objekt allokeras på stacken och har kort livslängd Objekt med längre livslängd måste allokeras dynamiskt på heapen (free store) Dynamisk allokering görs med new och delete Statiska
Läs merKapitel 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
Läs merKLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar
KLASSER Inkapsling Abstrakt datatyp Public och private Klassmedlemmar Datamedlemmar Funktionsmedlemmar Initiering av objekt Konstruktor Ta del av objektets tillstånd Förändra objektets tillstånd Avinitiera
Läs merInnehå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:
Läs merTentamen 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.
Läs merJava, klasser, objekt (Skansholm: Kapitel 2)
Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma
Läs merTDDI14 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
Läs merFöreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser
Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
Läs merKapitel 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
Läs merFöreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
Läs mer2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursassistent: Mårten Björkman,
2D1387, Programsystemkonstruktion med C++ 01/02 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursassistent: Mårten Björkman, celle@nada.kth.se Kursens hemsida:
Läs merint (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int
Pekare char v[10]; //array med 10 characters char* p; //pekare till characters //p pekar på v's fjärde element p = &v[3] p & är "adressen-av" operatorn. För de flesta typer T gäller att T* är typpekare.
Läs merInnehå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
Läs merTDDC76 - 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
Läs merDet 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.
Läs merTypkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
Läs merInnehå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
Läs merSkapa, kopiera och destruera klassobjekt
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för Programvara och system Tommy Olsson 2013-08-12 Skapa, kopiera och destruera klassobjekt Detta dokument tar upp viktiga, grundläggande
Läs merFö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
Läs merExempel. 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
Läs merFunktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
Läs merEtt 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
Läs merMinnestilldelning (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å
Läs merC++ 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
Läs merFöreläsning 3-4 Innehåll
Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå
Läs merInkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private
Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall
Läs merTentamen *:58/ID100V Programmering i C Exempel 3
DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst
Läs merTentamen 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å
Läs merUppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:
Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte
Läs merFö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
Läs merOOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Läs merpublic och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Läs merGenerell (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)
Läs mer3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn
3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn Minneshantering har väldigt lite med objektorienterad programmering att göra, många objektorienterade programspråk implementerar
Läs mer