Föreläsning 5-7 Operatoröverlagring

Save this PDF as:
 WORD  PNG  TXT  JPG

Storlek: px
Starta visningen från sidan:

Download "Föreläsning 5-7 Operatoröverlagring"

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 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 mer

Föreläsning 4 Tillägg till C-syntaxen

Fö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 mer

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

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

Läs mer

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 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 mer

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

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

Läs mer

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

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..........................................

Läs mer

2D1387, Programsystemkonstruktion med C++ 01/02 1

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

Läs mer

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 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 mer

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

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

Läs mer

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

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 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 mer

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

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

Läs mer

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

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

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 *: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 mer

SP:PROG3 HT12 Tenta 2013-01-19

SP:PROG3 HT12 Tenta 2013-01-19 DSV SU/KTH sid 1 (5) SP:PROG3 SP:PROG3 HT12 Tenta 2013-01-19 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygskriteria

Läs mer

C++-programmets beståndsdelar

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

Läs mer

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

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)

Läs mer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

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

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

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

Läs mer

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

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

Läs mer

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Ö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 mer

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

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

Läs mer

Pekare och arrayer. Indexering och avreferering

Pekare 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

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

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

Läs mer

Programmera 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?? 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 mer

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. 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 mer

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Funktionspekare, 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 mer

Innehåll. Pekare Exempel

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.

Läs mer

TDDC76 - Programmering och Datastrukturer

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.

Läs mer

Innehåll. Pekare Exempel

Innehåll. Pekare Exempel Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.

Läs mer

Dynamisk bindning och polymorfism

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

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.

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,

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Fö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 mer

Fö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 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 mer

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll. Abstrakta datatypen lista. 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 mer

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

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

Läs mer

allokeras på stacken dynamiskt new delete

allokeras 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 mer

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

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

Läs mer

Standard Template Library STL. Behållarklasser

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

Läs mer

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

KLASSER. 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 mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, 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 mer

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursassistent: Mårten Björkman,

2D1387, 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 mer

Föreläsning 5-6 Innehåll

Fö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 mer

Det finns många flaggor till g++,

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.

Läs mer

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019

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å

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

Läs mer

Typkonvertering. Java versus C

Typkonvertering. 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 mer

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

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

Läs mer

int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int

int (*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 mer

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

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)

Läs mer

Funktionens deklaration

Funktionens deklaration Funktioner - 1 Teknik för stora program #include #include......... cout

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen *: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 mer

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

Collections Collections Envisa objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng Klasser som skall bli "envisa" Klassen Anstelld skall

Läs mer

OOP Objekt-orienterad programmering

OOP 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 mer

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Uppgiften ä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 mer

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Läs mer

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Inkapsling 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 mer

Introduktion till arv

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

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F5:1 OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling Vi skall nu titta på ett exempel med myror. Varje myra har ett namn

Läs mer

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med. Det objektorienterade synsättet A - 1 Objekt A - 2 Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med. De enskilda variablerna i programmet, de s.k. objekten,

Läs mer

C++ - En introduktion

C++ - En introduktion C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna

Läs mer

Objektorienterad programmering Föreläsning 4

Objektorienterad programmering Föreläsning 4 Objektorienterad programmering Föreläsning 4 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda Introduktion till objektorientering Klasser och Objekt Instansvariabler Metoder Introduktion

Läs mer

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++, 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

Läs mer

Operatoröverlagring. 1 Definition och deklaration av operatorfunktioner. 2 Anrop av operatorfunktioner

Operatoröverlagring. 1 Definition och deklaration av operatorfunktioner. 2 Anrop av operatorfunktioner En operator är i princip en funktion. Den utför en beräkning grundat på sina argument och ger ett värde som resultat. Det som skiljer en operatorfunktion från en vanlig funktion är dess namn och hur den

Läs mer

float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number ) 1 Datatyper och Uttryck I räkneprogrammet tidigare såg vi att C++ kräver deklarationer av alla variabler som används. I räkneprogrammet användes bara variabler av heltalstyp, int, men det finns naturligtvis

Läs mer

Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering

Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering Innehåll EDAF30 Programmering i C++ 7. Resurshantering, Felhantering Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Felhantering Exceptions

Läs mer

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305 Klass Object, instans av klass public/private Klassvariabler och klassmetoder 1 Array och ArrayList Arrayer och ArrayList är till för att innehålla

Läs mer

Poster ( structar ) Postdeklarationer

Poster ( structar ) Postdeklarationer Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.

Läs mer

3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn

3. 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

Initiering och tilldelning

Initiering och tilldelning Initiering och tilldelning Initiering och tilldelning Datatyper Inbyggda datatyper Abstrakta datatyper Konkreta datatyper Motiv för en mall för klassdefinitioner Exempel: "En (o)säker array" Konstruktor

Läs mer

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10

Djup/ytlig kopiering av containrar med referensobjekt. Allmänt. Vad ska container innehålla? 2004-05-10 Djup/ytlig kopiering av containrar med erensobjekt Allmänt Om man inte vet hur många objekt man kommer behöva under exekvering så måste dynamiska lagringsstrukturer användas. stack, kö, lista, träd osv

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

5 Arv och dynamisk bindning FIGUR

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

Läs mer

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. KAPITEL 8 Klasser Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering. 169 Hittills: Enkel datatyp: double, int, char Operationer: förutbestämda, t ex +,

Läs mer

TDDC76 - Programmering och Datastrukturer

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

Läs mer

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler 1 Datorn som miniräknare I detta avsnitt tas upp hur man kan skriva program som utför enkla räkneoperationer och skriver resultat på skärmen. Syftet är i huvudsak att se hur flera satser kan bygga upp

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

maxlist-1. Indexerad lista Länkad lista

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

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

JAVAUTVECKLING LEKTION 11

JAVAUTVECKLING LEKTION 11 JAVAUTVECKLING LEKTION 11 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Mer om klasser och objekt Statiska/instans-metoder Överlagrade metoder Inkapsling Konstruktorer 1 UPPGIFT

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

Objekt och klasser - Introduktion

Objekt och klasser - Introduktion Objekt och klasser - Introduktion Begreppet objekt Hur klasser används för att skapa objekt Fördefinierade klasser Metoder och parameteröverföring Definiera klasser Modifierare Statiska variabler och metoder

Läs mer

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

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,

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer C++ - en introduktion Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna Ett första

Läs mer

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander F2 Datatyper och variabler ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Datatyper Java är ett starkt typat språk Varje slags data har en datatyp Datatyp Javasyntax Exempel Teckensträng

Läs mer

1. Klass med en dynamiskt allokerad variabel, definitionsfilen-del Klass med en dynamiskt allokerad variabel, inkluderingsfilen.

1. Klass med en dynamiskt allokerad variabel, definitionsfilen-del Klass med en dynamiskt allokerad variabel, inkluderingsfilen. 1. Klass med en dynamiskt inkluderingsfilen Klass2-1 1. Klass med en dynamiskt definitionsfilen-del 1 Klass2-2 #ifndef person #define person #include #include class Person private:

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer