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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 *: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 kan fortfarande användas som boolska värden men det är bekvämare och tydligare med bool) Deklarationssatser, d.v.s. deklarationer tillåtna bland satser (som i Java) Deklaration av styrvariabel i for-satsens initieringsuttryck (som i Java) Deklaration av styrvariabel (?) i ett if- eller while-villkor: if (char *ptr = strchr(line, \n )) *ptr = \0 ; else while (getchar()!= \n ) ; Deklarationsvidden för en sådan variabel är hela if-satsen inkl. else-grenen. Tyvärr får en sådan deklaration inte ingå i ett mer komplext uttryck Bild 47 1

2 Referenser En referens i C++ är ett nytt namn på ett utrymme. Först syntax, sedan användnig Referens deklareras med modifieraren & efter typen: int i = 135; int& iref = i; iref är nu ett annat namn på samma utrymme som variabeln i har. Referensnamnet kan användas på precis samma sätt som det ursprungliga namnet: iref = 177; samma effekt som i = 177; iref++; samma effekt som i++; int *ipek = &iref; samma effekt som int *ipek = &i; Det finns inget sätt att ändra en referens att referera till annat utrymme, en referens är knutet till samma utrymme under hela sin livstid (precis som den ursprungliga variabeln). En referens måste alltså knutas till utrymme genom initiering vid sin definition (eller snarare vid sin initiering - om referensen definieras som medlem i en klass eller struct kan den inte initieras vid definitionen utan i konstruktorns initieringslista) Bild 48 Obs skillnaden mot adresstagningsoperatorn! Obs att denna användning av &-tecknet är helt ny och har ingenting med adresstagningsoperatorn & att göra! Adresstagningsoperatorn är en operator, den skrivs framför en variabel (e.d.) i ett uttryck för att få fram adressen till variabeln: int i = 57; int* ipek; ipek = &i; addresstagning i ett uttryck Typmodifieraren & skrivs efter typnamnet i en deklaration och innebär att man deklarerar ett nytt namn för ett existerande utrymme: int& iref = i; typmodifierare i en deklaration Bild 49 2

3 const-referenser En vanlig referens måste knutas till ett redan namngivet utrymme, högerledet i initieringen måste alltså vara ett lvalue (representera ett utrymme): int i = 150; char *pek = NULL; int arr[4]; int& refi = i; ok char *& pekref = pek; ok int& ar3ref = arr[3]; ok int& felref = 13; fel!!! Eftersom referenser används väldigt mycket för argumentöverföring till funktioner ansågs denna begränsning för restriktiv. Man har därför infört att const-referenser (som alltså refererar till utrymmen vilkas innehåll inte kan förändras) får initieras med värden: const int& ref = 13; ok Vid en sådan initiering skapas ett anonymt utrymme där värdet lagras och referensen blir namnet på detta utrymme. Bild 50 Referenser, huvudsaklig användning Formella argument till funktioner som skall kunna ändra sina aktuella parametrar void swap(int& x, int& y){ int z = x; x=y; y=z; Precis som Pascals VAR-parametrar void funk(){ int a = 5, b = 7; swap(a, b); Formella argument till funktioner, där argumenten är större än en int eller en pekare (för att undvika onödig kopiering av objekten, om argumenten inte skall förändras deklareras de const). Det är alltså det rekommenderade sättet att skicka argument i C++! bool check_name(const Person& p, const string& name){ return p.get_name() == name; Bild 51 3

4 Referenser, huvudsaklig användning, forts. Returtypen för funktioner (eller operatorer) som skall returnera ett lvalue : class Text{ int siz; char *cptr; char& operator[](int index){ return cptr[index]; ; lvalue - en tilldelningsbar storhet void funk(){ Text namn( Jozef ); namn[2] = s ; Bild 52 Dynamisk minnesallokering För dynamisk minnesallokering resp. avallokering används operatorerna new och delete, båda i två varianter - för enskilda objekt eller arrayer: Person *perspek=new Person( Jozef, 13); Person *folk=new Person[5]; (ovan anropas default-kontruktorn för vart och ett av de 5 objekten) char *str=new char[1024]; Motsvarande avallokeringar: delete perspek; delete [] folk; delete [] str; Vid new allokeras utrymme och konstruktorn anropas. Vid delete anropas destruktorn och utrymmet avallokeras. Det finns ingen motsvarighet till realloc (men bibliotekets vektor<> ger ju en dynamisk arrayliknande samling och bibliotekets string är dynamisk, så det finns egentligen inget behov). Bild 53 4

5 Dynamisk minnesallokering, forts. Om det saknas utrymme på heapen vid new generas undantaget bad_alloc som kan fångas upp : try{ char *pek = new char[1024]; catch(std::bad_alloc&){ std::cerr << Out of memory, canceled!\n ; Man kan även installera en egen funktion som då anropas istället: void out_of_memory(){ std::cerr << Out of memory, program exits!\n ; std::exit(13); int main(){ std::set_new_handler(out_of_memory); char *pek = new char[1024]; Den installerade funktionen anropas i en loop tills allokeringen lyckats. Funktion borde alltså antingen friställa utrymme så att allokeringen lyckas eller terminera programmet. Bild 54 Dynamisk minnesallokering, forts. malloc, calloc, realloc och free kan användas men man måste vara konsekvent : allokerat med malloc, calloc eller realloc - avallokera med free, allokerat med new -avallokeramed delete Obs att X-alloc-funktionerna inte anropar konstruktorer och att free inte anropar destruktorer! new och delete kan definieras om (överlagras), t.ex. för att allokera resp. återlämna utrymme någon annanstans än på heapen (exempelvis i en på förhand allokerad pool av utrymmen). Detta gör att man t.ex. kan skapa en automatisk garbage collector för sina program. Överlagringen av new och delete kan göras globalt eller för enskilda klasser. Det finns även varianter av new där man kan begära t.ex. placering av objekten på angivna adresser i minnet o.s.v. Intressant som allt detta är faller det utanför ramen för denna kurs. Bild 55 5

6 Funktionsöverlagring Man kan ju ha flera funktioner med samma namn men olika argumentlistor. Samtidigt behöver inte aktuella argumentvärden vid ett funktionsanrop vara av exakt samma typ som formella argument, bara det går att omvandla med implicit konvertering, t.ex. void funk(double d); void gunk(){ int i=13; funk(i); // Fungerar som funk((double)i); Om det nu hade funnits flera funktioner funk() med möjlighet till implicit konvertering, t.ex. void funk(char c); void funk(long l); osv så måste det finnas regler för vilken funktion som väljs ut för anrop. Dessa regler följer på nästa bild. De kompletteras dessutom med följande: returtypen beaktas inte vid överlagring funktioner från olika deklarationsområden (scope) utom namnrymder överlagrar inte varandra, men kan hämtas in genom using-deklarationer för medlemsfunktioner: const-medlem kan överlagra icke-const-medlem Bild 56 Function overloading resolution Identifiering av funktioner och funktionsmallar som kan komma ifråga. Av funktionsmallar väljs den mest specialiserade. Rangordning av kandidater: Exakt överensstämmelse eller triviala konverteringar (array till pekare, funktion till pekare, icke-const till const ) Befordringskonverteringar (bool till int, char till int, float till double osv.) Standardkonverteringar (int till double, double till int, Subklass* till Basklass*, TYP* till void* osv.) Användardefinierade konverteringar (genom konstruktorer och konverteringsfunktioner) Variabla argumentlistor, dvs. sist i argumentlistan Bäst-passande funktion: bäst för minst ett argument, ej sämre än någon annan för övriga. Om flera funktioner passar lika bra är det fel (tvetydighet, ambiguity), måste lösas genom explicit konvertering av argumenten vid anrop - d.v.s. av tillämpningsprogrammeraren ( entydiggörande, disambiguering?). Om ingen funktion passar är det givetvis också fel. Kontroll om anrop av den valda funktionen är korrekt (synlighet, returtyp) Bild 57 6

7 Defaultargument Om en funktion (eller medlemsfunktion, eller konstruktor) har argument för vilka det finns ett meningsfullt default-värde kan detta värde anges vid deklarationen av funktionen och behöver då inte anges vid anrop: void skriv_tecken(int antal, char tecken= * ){ for(int i=0; i<antal; i++) cout << tecken; cout << endl; int main(){ skriv_tecken(10,? ); // Skriver tio? skriv_tecken(10); // Skriver tio * Argumenten med defaultvärden måste stå sist i argumentlistan. Defaultvärdet får bara anges en gång, om en funktion deklareras på ett ställe och definieras på ett annat så anges det antingen i deklarationen eller i definitionen. Obs att det inte får finnas en överlagrad funktion som gör att anropet blir tvetydigt, om det t.ex. finns void skriv_tecken(int antal) {.. så vet inte kompilatorn vilken av funktionerna som anropas vid anropet skriv_tecken(30); En konstruktor med endast argument med defaultvärden blir defaultkonstruktorn. Bild 58 Infogade (inline) funktioner Med nyckelordet inline framför en funktionsdefinition eller deklaration anger man för kompilatorn att man vill att maskininstruktionerna för funktionen skall kopieras in i objektkoden på varje ställe där anrop sker, istället för att lagras på en plats och skötas med subrutinanrop. Detta görs för mycket små funktioner, oftast funktioner som bara anropar en annan funktion, t.ex. Klocka operator+(const Klocka& k, int min){ Klocka(k.get_tot_min() + min); inline Klocka operator+(int min, const Klocka& k){ return k + min; // Anrop av ovanstående operator+, // vänder bara på argumenten inline-funktioner utgör bl. a. ett alternativ till preprocessormacros, som inte bör användas inline är bara ett önskemål, kompilatorn avgör om funktionen går att översätta på detta sätt Medlemsfunktion som definieras inne i en klassdefinition är implicit deklarerade inline (men man kan inline-deklarera en medlemsfunktion definierad utanför klassen också). Bild 59 7

8 Infogade funktioner och one-definition rule För att kompilatorn skall kunna lägga in koden för en inline-funktion istället för anrop måste den ha tillgång till hela funktionsdefinitionen vid kompilering av de moduler som anropar funktionen. Om funktionen hör till en annan modul måste alltså definitionen finnas i headerfilen! I C skulle detta skulle leda till problem om två olika moduler som inkluderade samma headerfil med en funktionsdefinition kompilerades var för sig och länkades ihop - i C89 är det inte tillåtet. I C++ gäller följande (något förenklat): inline-funktionsdefinitioner, klassdefinitioner och mallar (och endast dessa) får inkluderas i källkoder för olika moduler som sedan länkas ihop om de är textuellt exakt lika och har samma betydelse. I praktiken innebär det helt enkelt att man kan placera dessa deklarationer och definitioner i headerfiler. Fortfarande måste man gardera sig mot upprepad inkludering av samma headerfil med #ifndef-direktiv Fortfarande gäller också att definitioner av vanliga funktioner måste göras i källkodsfiler som kompileras separat. Bild 60 C:s typecast double d = 3.14; int i = (int) d; Bör inte användas (?) Explicit typkonvertering C++ gammaldagskonverteringar - funktionsnotation: int i = int(d); Kräver ett typnamn: void func(void *vptr){ typedef char* Charpointer; char *cptr = Charpointer(vptr); Standard C++-konverteringar ( nya ): static_cast<måltyp>(uttryck) const_cast<måltyp>(uttryck) dynamic_cast<måltyp>(uttryck) reinterpreted_cast<måltyp>(uttryck) int i = static_cast<int>(d); Bild 61 8

9 Explicit typkonvertering - konstruktorer Antag följande: class Text{ int siz; char *cptr; Text(char *str){ ; void funk(const Text& t){ Säg att vi vill anropa funk() med strängen Jozef. Text:s konstruktor kan användas för att konstruera ett temporärt Text-objekt ur en char *: funk(text( Jozef )); Detta är ju helt i enlighet med funktionsnotation för typkonverteringar. Detta kallas för användardefinierad konvertering. Det finns även en annan variant av användardefinierad konvertering, tas upp senare. Bild 62 Implicit typkonvertering Den explicita konverteringen av char * till Text på föregående bild är inte nödvändig, det hade fungerat lika bra att anropa funk så här: funk( Jozef ); Detta beror på att kompilatorn, när den träffar på ett värde av en annan typ än den förväntade typen, försöker hitta ett sätt att konvertera det påträffade värdet till ett värde av den förväntade typen. Det är inget konstigt med det, vi är vana vid att int-värden automatiskt konverteras till double-värden när de blandas med double-värden i uttryck och många fler sådana situationer. Så kompilatorn ser Text-konstruktorn som ett sätt att från det påträffade char *-värdet konstruera ett värde av den förväntade Text-typen och kommer att anropa Text-konstruktorn själv. Om man vill förhindra sådan implicit konvertering så kan man deklarera konstruktorn med nyckelordet explicit: class Text{ int siz; char *cptr; explicit Text(char *str){ Bild 63 ; 9

10 Temporära objekt Uttrycket Text( Jozef ) i funk(text( Jozef )); är ett explicit konstruktoranrop. Det resulterar i att ett temporärt objekt skapas, används och städas bort. Precis samma sak händer vid implicit konvertering. Temporära värden är vi vana vid från t.ex. aritmetiska uttryck, vid beräkningen int sek_per_dygn = 24 * 60 * 60; beräknas först 24 * 60, detta resultat måste lagras någonstans för vidare beräkning. Temporära objekt betraktas på samma sätt: de lever en kort stund och städas bort automatiskt. Om det finns en const-referens som är knutet till objektet så lever objektet så länge referensen finns, annars försvinner det när det uttryck däri det skapats är utvärderat (en referens som inte är const kan inte knytas till ett temporärt objekt). Obs dock att konstruktorn körs som vanligt vid skapandet och destruktorn vid bortstädandet. Bild 64 Temporära objekt, forts. Skapande av temporärt objekt genom explicit konstruktoranrop är ett bekvämt sätt att konstruera ett objekt som behövs bara för att omdelbart kopieras någonstans eller knutas till en const-referens-argument för att existera bara under ett funktionsanrop. class Klocka{ int totmin; Klocka(int min_efter_midnatt){ totmin = min_efter_midnatt; int get_tot_min() { return totmin; ; Klocka operator+(const Klocka& k, int min){ return Klocka(k.get_tot_min() + min); Bild 65 10

11 Objekttyper per livslängd Statiska objekt Definierade utanför funktioner eller som lokala statiska objekt Ligger i den statiska arean Initieras vid programstarten, finns under hela programexekveringen, destrueras automatiskt när exekveringen terminerar Lokala automatiska objekt Definierade lokalt i funktioner (ev. i inre block). Läggs på stacken. Initieras under anropet av funktionen när exekveringen nått definitionen, finns under anropet (ev. exekveringen av inre blocket), destrueras automatiskt när anropet terminerar (ev. när exekveringen lämnar det inre blocket) Dynamiskt skapade objekt Skapas med new, t.ex Text *tpek=new Text( Dynamo ); Läggs på heapen Finns tills de städats bort med delete, t.ex. delete tpek; Temporära objekt Skapas genom explicit anrop av konstruktorn, t.ex. Text( Tempo ) eller då kompilatorn tycker sig behöva ett sådant objekt Destrueras automatiskt så fort uttrycket det ingick i är klart eller då referensen som knutits till det försvinner Bild 66 Statiska klassmedlemmar Liksom i Java kan man deklarera statiska medlemmar som då blir globalt existerande enheter i en enda uppsättning, tillgängliga för alla objekt av klassen men även då det inte finns något objekt. Statiska medlemmar kan endast deklareras i klassen, de måste definieras utanför (ett undantag utgörs av definitioner av heltalskonstanter). Åtkomst görs genom räckviddsoperatorn :: Det klassiska exemplet - objekträknande klass: class Counted{ static int count; // Endast deklaration string data; // Instansvariabel Counted(string s):data(s){ count++; Counted(const Counted& other):data(other.data){ count++; ~Counted(){ count--; string get_data() const { return data; static int get_count(); // Endast deklaration ; Bild 67 11

12 Statiska medlemmar, forts. Definition av statiska medlemmar måste göras utanför klassen (i.cpp-filen): int Counted::count=0; // Definition med initiering int Counted::get_count(){ // Definition av medlemsfunktionen, return count; // ordet static upprepas inte Anrop av get_count() görs enligt följande: void funk(){ Counted c1( Jozef ), c2( Stefan ); cout << Counted::get_count() << endl; Statiska medlemmar är inte lika vanligt förekommande som i Java eftersom det i C++ ju finns fristående funktioner - i Java måste alla funktioner tillhöra någon klass vilket leder till missbruk av statiska medlemsfunktioner. I C++ grupperar man klasser och tillhörande hjälpfunktioner i namnrymder. Bild 68 friend-deklarationer Genom att i en klass deklarera en funktion som friend ger man funktionen tillgång till klassens privata medlemmar: class Klocka { int min; friend Klocka operator+(int, const Klocka&); ; const Klocka operator+(int m, const Klocka& k){ return Klocka(m + k.min); Obs! att friend-deklarationen inte deklarerar funktionen, den säger bara att om det finns en sådan funktion och om den försöker göra åtkomst till privata data i denna klass så är det ok. En friend-deklaration introducerar ju inte en medlem, så det spelar ingen roll om den skrivs i en public-, private- eller protected-sektion. Bild 69 12

13 friend-deklarationer, forts. Om friend-funktionen är en medlemsfunktion i en annan klass anges dess namn som vanligt med klassens namn och deklarationsviddsoperatorn, definitionen av denna klass måste i så fall stå före: class Alfa{ void funk(beta& b) { b.x++; ; class Beta{ int x; friend void Alfa::funk(const Beta&); ; Om man vill ge alla medlemsfunktioner i en annan klass sådan åtkomst deklarerar man klassen som friend, t.ex. friend class Alfa; Om två klasser skall ge varandra ömsesidig tillgång till sina privata delar kan kravet på att definitionen skall stå innan inte uppfyllas, då kan en av klasserna deklareras först: class Alfa; class Beta{ friend class Alfa;. ; class Alfa{ friend class Beta; ; Bild 70 const-ighet :) Att vissa objekt eller värden inte får modifieras (alls eller av ett visst programavsnitt) är en viktig aspekt av programdesign. I C++ finns utbyggt språkligt stöd för detta med kompilatorkontroll. Givet en typ, t.ex. int eller Person, så betraktas typen const int eller const Person som en annan typ, besläktad med den ursprungliga typen men utan modifieringsoperationer. Det är tillåtet med tilldelning från icke-const till const men inte tvärtom. Bild 71 13

14 const-ighet, forts. Antag class Coord{ int x, y; Coord(int xx, int yy):x(xx), y(yy){ int getx() { return x; int gety() { return y; void move(int dx, int dy) { x+=dx; y+=dy; ; Kompilatorn kontrollerar att man inte har möjlighet att (av misstag) modifiera ett const-objekt: void gunk(coord& a){ // funk med icke-const argument, kan ändra a void funk(const Coord& x){ Coord *pek1 = &x; // kompileringsfel! const Coord *pek2 = &x; // ok gunk(x); // kompileringsfel! gunk(const_cast<coord&>(x)); // ok int y = x.getx(); // kompileringsfel! Bild 72 const-ighet, forts. Det sista felet på föregående bild int y = x.getx(); // kompileringsfel! beror på att medlemsfunktionen getx inte deklarerar att den inte förändrar sitt objekt, därför får man inte anropa den hos ett const-objekt. Att en medlemsfunktion inte förändrar sitt objekt deklareras med ordet const i funktionshuvudet efter argumentlistan: class Coord{ int x, y; Coord(int xx, int yy):x(xx), y(yy){ int getx() const { return x; int gety() const { return y; void move(int dx, int dy) { x+=dx; y+=dy; ; Detta gäller endast icke-statiska medlemsfunktioner. Ordet const här är en del av signaturen, ska alltså stå både i deklarationer och i definitionen. Bild 73 14

15 const-ighet, forts. Ibland uppstår behovet att ha en viss operation i en klass implementerad på två olika sätt så att den kan utföras på ett sätt i ett const-objekt och på ett annat sätt i ett icke-const-objekt. Man kan då ha två medlemsfunktioner med samma namn och argument men den ena deklarerad som const och den andra inte. Det vanligaste exemplet är indexeringsoperatorn: class Text{ int siz; char *cptr; char& operator[](int index){ return cptr[index]; char operator[] (int index) const { return cptr[index]; ; Hos ett const-objekt kommer const-funktionen att anropas, hos ett icke-const-objekt anropas icke-const-funktionen. Bild 74 const-ighet, forts. Objekt av klasser med värdesemantik ska ibland bete sig som modifierbara objekt, men ibland som icke-modifierbara värden. T.ex. ska ju resultatet av en överlagrad operator+ vara ett värde, inte ett lvalue, givet Klocka k1(13,0), k2(23,0); ska man ju inte kunna göra: k1 + 3*45 = k2; // Borde vara fel! För att ange att ett objekt ska betraktas som värde deklarerar man dess typ som const, t.ex. const Klockslag. T.ex. borde operator+ för Klockslag vara: const Klocka operator+(const Klocka& k, int min){ return Klocka(k.get_tot_min() + min); varvid modifieringar av resultatet förbjuds. Bild 75 15

16 const-ighet, forts. Vid avancerad utformning av biblioteksklasser kan det hända i mycket speciella situationer att någon medlemmar som inte är synlig för tillämpningsprogrammeraren ska kunna modifieras även i const-objekt. I så fall kan medlemmen deklareras med nyckelordet mutable och kan då modifieras även om dess objekt är const. Långsökt exempel: Text-klass där man samlar indexeringsstatistik: class Text{ int size; char *cptr; mutable int times_indexed; Text():size(0), cptr(0), times_indexed(0){ Text(const char *str); char& operator[] (int index){ times_indexed++; return data[index]; char operator[] (int index) const { times_indexed++; return data[index]; int get_times_indexed() const { return times_indexed; ; Bild 76 16

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

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

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

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner

Läs mer

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

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

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

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

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

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( ) TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]

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

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

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

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

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

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

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

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

C++ Objektorientering - Klasser. Eric Elfving

C++ Objektorientering - Klasser. Eric Elfving C++ Objektorientering - Klasser Eric Elfving 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med struct är åtkomst... 2 / 20 Följande

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

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser Innehåll EDAF30 Programmering i C++ Resurshantering. Objektorientering. Klasser. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typdeklarationer och typomvandling 2 Resurshantering Stack-allokering Heap-allokering:

Läs mer

TDIU01 Programmering i C++

TDIU01 Programmering i C++ TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista

Läs mer

Föreläsning 5-7 Operatoröverlagring

Föreläsning 5-7 Operatoröverlagring *:85/ID200V C++ HT07 Föreläsning 5-7 Operatoröverlagring Operatoröverlagring Följande operatorer kan inte överlagras: ::..*?: sizeof typeid Alla övriga operatorer kan överlagras. Följande operatorer måste

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

Funktionens deklaration

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

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics

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

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

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

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

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Minnestilldelning (allokering) och frigörande (avallokering) av minne Pekare i C++ Pekare används mycket i C++. De är bra både för att de tillåter dynamisk minnesallokering och för att de är referenser. En pekarvariabel innehåller en adress till ett element, den pekar på

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

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

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

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

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande

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. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering Innehåll EDAF30 Programmering i C++ 6. Resurshantering Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Smarta pekare 3 Klasser, resurshantering

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

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

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap C++ Objektorientering - Klasser Eric Elfving Institutionen för datavetenskap 1 / 23 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med

Läs mer

1 Funktioner och procedurell abstraktion

1 Funktioner och procedurell abstraktion 1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

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

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

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

TDDC76 Programmering och datastrukturer

TDDC76 Programmering och datastrukturer TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer

Läs mer

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet Kapitel 3 Klassanvändning Operatorer Pekare Kapitel 3 - Klassanvändning, operatorer och pekare Vänner till klasser och funktioner Virtuella funktioner och polymorfi Abstrakta basklasser och strikt virtuella

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

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

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

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

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

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << Hello World\n; return 0; } C++, Övning 1 Ett enkelt program i C++, hello.cpp C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel int

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

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

grundläggande C++, funktioner m.m.

grundläggande C++, funktioner m.m. C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel Ett enkelt program i C++, hello.cpp #include

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Programsystemkonstruktion med C++

Programsystemkonstruktion med C++ Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Objektorientering - Klasser Eric Elfving Institutionen för datavetenskap 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data

Läs mer

Skapa, kopiera och destruera klassobjekt

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

Tillämpad programmering

Tillämpad programmering Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout

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

JAVA Mer om klasser och objektorientering

JAVA Mer om klasser och objektorientering JAVA Mer om klasser och objektorientering Begreppet package - paket Package används när man t ex vill skapa ett eget bibliotek med klasser. Sen är det då meningen att man ska importera detta paket i det

Läs mer

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

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

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

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

Kapitel 6 - Undantag

Kapitel 6 - Undantag Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp

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

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt: 8. Objektorientering Skälet till att C++ är ett av de mest använda programspråken är att det är objektorienterat. Detta bygger vidare på begreppet struct (ursprungligen från språket C som inte är objektorienterat),

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

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

1 Namnkontroll (NameControl)

1 Namnkontroll (NameControl) 1 Namnkontroll (NameControl) När en ny variabel, ett objekt, en konstant o s v introduceras måste programmeraren namnge denna. Allting identifieras m h a namn. När ett program består av väldigt många komponenter

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

Föreläsning 3-4 Innehåll

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan Vad är en klass? Övnin 2 Daens ämne är klasser och hur de hanteras. Vi kommer att bya upp ett exempel stevis och illustrera en hel del möjliheter, men också problem och saker man bör vara vaksam på. ffl

Läs mer

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

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010 Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis

Läs mer