Föreläsning 4 Tillägg till C-syntaxen
|
|
- Nils Ekström
- för 7 år sedan
- Visningar:
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 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
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
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
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
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
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,
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[]
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
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.
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 + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
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
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
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
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
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
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.
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Innehåll. 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.
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
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
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
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
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
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:
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
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
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
Funktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
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
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
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 (
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
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
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å
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
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
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å
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
*: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
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
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
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.
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
Synlighet. Namespace Scope-operatorn Klasser Vänner
Synlighet Namespace Scope-operatorn Klasser Vänner Synlighet Ett problem med moduler i C är att alla variabel- och funktionsnamn ligger globalt synliga. C++ botar detta genom att införa det mycket användbara
Föreläsning 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
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
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
(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
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
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
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
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
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
Ö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
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
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
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)
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
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
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
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
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
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.
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
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner
Programmering 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
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
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
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
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
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
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
Ö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
Ö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++
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
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
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
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
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
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,
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..........................................
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
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
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
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
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
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
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
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
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),
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
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
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
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
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å
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
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
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