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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 3. Minneshantering - (copy)konstruktorn, destruktorn och tilldelningsoperatorn Minneshantering har väldigt lite med objektorienterad programmering att göra, många objektorienterade programspråk implementerar en skräpsamlare som tar hand om minne som inte används längre. I C++ finns dock ingen sådan skräpsamlare p g a effektivitetskrav. Därför krävs att en C++-programmerare känner till lite om minneshanteringen för att kunna implementera robusta klasser. Ett C++-program kan allokera minne i tre minnesområden: Run-time-stacken (Automatic storage) Statiska minnet (Static storage) Heapen eller fritt/dynamiskt internminne (Free storage, Heap memory, Dynamic memory) Dessa minnestyper har olika semantik vad gäller objekts initiering och livstid. Lokala objekt/variabler som definieras per värde inuti operationer och operationsargument (vid värdeanrop) allokeras på run-time stacken. Objekt skapas automatiskt på stacken vid ingång i en operation eller ett block Vid utgång ur ett block tas inte värdena bort rent fysiskt på stacken utan stackpekaren flyttas helt enkelt för att möjliggöra överskrift av nya stackvariabler. Globala objekt/variabler, statiska objekt/variabler, statiska datamedlemmar i en klass, och namespace variabler allokeras i det statiska minnesområdet. Stacken och det statiska minnesområdet används för att allokera data vars storlek är känd vid kompileringen. På heapen allokeras minne dynamiskt, i C++ med hjälp av nyckelordet new. Ex: Object* o = new Object(possibly constructor arguments ); Minne som allokerats dynamiskt måste lämnas tillbaka manuellt av programmeraren med nyckelordet delete. delete o; Heapen upprätthåller en lista av de minnesblock med respektive storlekar som är fria för allokering. Denna information är lätt att förstöra, exempelvis genom att skicka en adress till delete som ej fåtts genom allokering med new eller att göra delete två gånger på samma pekarvariabel eller genom att fortsätta skriva till ett minnesblock efter att det återtagits med delete

2 3.1 Konstruktorer Varje klass har fyra speciella medlemsoperationer: defaultkonstruktorn, copy-konstruktorn, destruktorn och tilldelningsoperatorn. Om dessa inte explicit deklareras och definieras av programmeraren så genereras de implicit. Meningen med konstruktorer är att dessa skall initiera varje datafält i objektet. Varje klass skall ha minst en konstruktor, och många bör också ha en defaultkonstruktor. Det är mycket vanligt att det finns flera konstruktorer definierade för en klass. När ett objekt allokeras reserveras minne för det. Vid detta tillfälle har objektet inga väldefinierade data. Objektets fält innehåller värden som råkar vara kvarlevor av tidigare programaktivitet. Det är konstruktorns jobb att initiera objektets datafält. En defaultkonstruktor kännetecknas genom att den inte tar emot några argument. Om programmeraren inte explicit deklarerar någon konstruktor alls så genereras en defaultkonstruktor implicit om klassen inte innehåller konstanter eller referenser som datamedlemmar. Viktigt att komma ihåg är också att defaultkonstruktorn inte utför någon initiering av användardeklarerade datamedlemmar eller allokering av dynamiskt minne. Då man har deklarerat en konstruktor som tar en eller flera parametrar så genereras ej en defaultkonstruktor implicit. Vill man då ha en defaultkonstruktor måste denna deklareras explicit. Detta illustreras av kodexemplet nedan. class File public: File(const string& file_path, int open_mode); ~File(); private: string path; int mode; ; File folder1[10]; //error, array requires default constructor File folder2[2] = File("f1", 1); // error, folder2[1] still requires // a default constructor File folder3[3] = File("f1", 1), File("f2",2), File("f3",3) ; //OK, fully initialized array

3 Explicita Konstruktorer En konstruktor som tar ett argument är default en implicit konverteringsoperator. Denna konverterar dess argument till ett objekt av sin klass. class String public: String(); String(int size); // constructor and implicit conversion operator String(const char* s); // constructor and implicit conversion // operator ~String(); private: int size; char *buffer; ; Att konvertera en int till en sträng är inte vettigt, detta är dock vad som händer nedan. int main() String s = "hello"; //OK, convert a C-string into a string object int ns = 0; s = 1; // 1 oops, programmer intended to write ns = 1 // I uttrycket s = 1; har programmeraren gjort ett skrivfel. Normalt skulle kompilatorn klaga och ge ett fel. Innan detta sker så letar först kompilatorn efter användardefinierade konversioner som tillåter detta. Kompilatorn finner en konstruktor som tar en int, och tolkar därför skrivfelet enligt följande: s = String(1); Detta har den oönskade effekten av att det förra objektet går förlorat och variabeln s refererar nu till ett nytt objekt. Ett liknande problem kan uppstå då en operation anropas som tar ett string-objekt som argument. int f(string s); int main() f(1); // without an explicit constructor, //this call is expanded into: f ( String(1) ); //was that intentional or merely a programmer's typo? För att undvika dessa implicita typkonversioner som ger en otydlig semantik måste konstruktorer som tar ett argument deklareras som explicit.

4 class String public: explicit String(int size); // block implicit conversion String(const char* s); //implicit conversion still possible ~String(); //... ; int main() String s = "hello"; //OK, convert a C-string into a string object int ns = 0; s = 1; // compile time error ; this time the // compiler catches the typo Varför är inte alla konstruktorer automatiskt deklarerade som explicit? Ett bra exempel på varför är string-klassens tredje konstruktor. String(const char *); String s; s = "Hello"; Denna tilldelning är tämligen semantiskt och intuitivt bra. Kompilatorn konverterar detta implicit till: s = String ("Hello"); //create a temporary and assign it to s Om denna konstruktor deklareras explicit måste man göra en typkorrekt tilldelning. class String public: explicit String(const char* s); //... ; int main() string s; //s = "Hello"; //does not work anymore s = string("hello"); //explicit assignment now required return 0; Det rekommenderas starkt att alltid deklarera en konstruktor som tar ett argument som explicit. Då tvingas alla som använder denna klass att förstå vad de håller på med samtidigt som man tar bort risken att skrivfel orsakar oönskade sidoeffekter.

5 3.2 Copy-konstruktorn En copy-konstruktors jobb är att av ett givet objekt skapa en kopia med skillnaden att det nya objektets identitet är skilt från originalobjektets. Copy-konstruktorer är användbara av följande anledningar. En uppenbar anledning till att ha copy-konstruktorer är för att direkt och explicit kunna göra en kopia av ett objekt. List a; // Make copies of List a List b(a) ; List* c = new List(a); En mer subtil anledning till att definiera en copy-konstruktor är att den behövs för att kunna kopiera argument och returvärden till/från operationer vid värdeanrop/värderetur. double average(list a) double sum = 0; int n = a.length(); //... return sum/n; Anmärkning: "a" är ett lokalt objekt i operationen average och ~List() anropas därför vid utträde ur operationen. int main() List lst; Double avg = average(lst); // lst copied into a Vad händer om vi inte har definierat en copy-konstruktor? 1. Om vi inte definierar en copy-konstruktor genereras en automatiskt och i denna sker en enkel kopiering av alla datamedlemmar. Alla variabler initieras (exempelvis, a.head = lst.head) 2. När operationen avslutas förstörs alla lokala varibler (för "a" anropas ~List() vilket tar bort alla noder i listan) 3. lst.head är därmed ej längre giltig. 4. Dessutom, när ~List() anropas för "lst" så kan det hända att delete appliceras på en ogiltig pekare vilket korrumperar listan över det fria minnet. Katastrofen är ett faktum. Anmärkning: Hur har ni klarat er utan en copy-konstruktor hittills? Jo, ni har använt er av alias, eller pekare. double average(list& a) //

6 double average(list* a) // Emellertid behöver man generellt alltid definiera en copy-construktor för att försäkra sig om ett korrekt beteende vid värdekopiering. Implementation av copy-konstruktorn List::List(const List& originallist) //Copy all the nodes in "originallist" to this list object När ovanstående har definierats så används copy-konstruktorn automatiskt för att kopiera argument till och returvärden från operationer. Alla klasser med en icketrivial destruktor behöver både en användardefinierad tilldelningsoperator och en användardefinierad copy-konstruktor. (Se nedan vad som menas med en icketrivial destruktor.) En del datastrukturer kan vara dyrbara att kopiera, genom att deklarera copy-konstruktorn och tilldelningsoperatorn som private ger kompilatorn ett felmeddelande om en användare av klassen försöker tillämpa en operation som kräver att dessa båda används. I detta fall behöver man givetvis inte implementera tilldelningsoperatorn eller copykonstruktorn utan bara deklarera dem. List reverse(list a) //"a" is made as a copy using the copy constructor List r; //... return r; // List (const List& originallist) copies r to the // scope of the caller // ~List destroys r List u, v; v = reverse(u); Om ingen användardefinierad copy-konstruktor existerar genereras en automatiskt. En implicit deklarerad copy-konstruktor är en public medlem i sin klass och har formen: C::C(const C&) ; Anmärkning: Detta gäller endast om varje eventuell basklass till C har en copy-konstruktor vars första argument är en konstant referens till ett objekt av basklassens typ Om detta inte är fallet kommer den implicit (automatiskt) definierade copy-konstruktorn att se ut på följande sätt: C::C(C&);

7 3.3 Destruktorn När man lämnar ett programblock i vilket ett objekt har allokerats återlämnas minnet till stacken. (Förutsatt att objektet allokerats på stacken). Har en destruktor deklarerats för klassen till vilken objektet hör så kommer destruktorn att exekvera innan minnet återlämnas till stacken. Uppgiften för en destruktor är att frigöra de resurser som objekt tagit i anspråk. De vanligaste uppgifterna för en destruktor är att återlämna minne, att stänga öppna filer, och att "släppa lås". Destruktorer anropas automatiskt och skall normalt sett inte anropas manuellt av programmeraren. Om man inte definierar en destruktor så genereras en automatiskt. Denna destruktor gör ingenting och ser ut som nedan. List::~List() Detta fungerar såvida inte man behöver frigöra resurser. För en länkad lista vet vi att det inte fungerar eftersom vi allokerar minne dynamiskt. Detta minne måste vi sedan avallokera i destruktorn. List::~List() //delete all the nodes in this list object Då vi har en destruktor som behöver utföra något speciellt kallas den för en icketrivial destruktor. Ta för vana att alltid definiera en destruktor för att undvika missöden.

8 3.4 Tilldelningsoperatorn En användardeklarerad (och definierad) tilldelningsoperator av en klass C är en icke statisk, medlemsoperation som tar exakt ett av argumenten C, C&, const C&, volatile C&, eller const volatile C& och returnerar C&. (Förutsatt en klass vid namn C.) Vi ska alltid använda en tilldelningsoperator som tar argumentet "const C&", vilket är normalfallet. Om ingen tilldelningsoperator har definierats av programmeraren skapas en implicit, denna är en public medlemsoperation av sin klass, och har formen: C& C::operator=(const C&); Tilldelningsoperatorn och destruktorer Destruktorers egenskap att anropas automatiskt innebär ett problem tillsammans med tilldelningsoperatorn såvida man inte har definierat den. List a: a.insert(...); //... List b; b.insert(...); //... a = b; // b goes out of scope // a goes out of scope // What happens? Två problem: De noder som listan a äger tas inte bort. De noder som listan b äger tas bort två gånger! Det första problemet uppstår vid tilldelningen, a = b, då sätts headpekaren i listan a att peka på det headpekaren i listan b pekar på. Därmed tappas alla noder bort som headpekaren för listan a refererade till. Listan b tas sedan bort första gången där det står; //b goes out of scope. Då b går ur scope körs ju destruktorn för b som avallokerar alla noder. När sedan a går ur scope, som ju refererar till de noder som tillhörde listan b, körs ju destruktorn för a och i värsta fall försöker då destruktorn att avallokera de noder som ju redan avallokerats då b gick ur scope. Då korrumperar man den lista som upprätthålls av systemet och som håller koll på det dynamiskt allokerade minnet. Katastrofen är ett faktum. Med den automatgenererade tilldelningsoperatorn sker endast en enkel tilldelning av datamedlemmarna. En lista har datamedlemmarna;

9 int size; Node* head; För tilldelningen med listobjekten ovan, a = b innebär detta följande; // OBS! Koden är ej korrekt utan används bara för att illustrera vad // som händer. a.head = b.head; a.size = b.size; För variabeln size är det ingen fara, den är av datatypen int och det vet vi ju att det går bra att tilldela en varabel av typen int till en annan. a.size blir en kopia av b.size. Däremot är det värre med den första tilldelningen. a.head = b.head innebär att a.head efter tildelningen pekar på samma sak som b.head, d v s a.head pekar på första noden i listan b. Vi måste alltså vid tilldelningen kunna se till så att: 1. de noder som a.head refererar tas bort på ett korrekt sätt 2. att a.head efter tilldelningen har fått en helt egen uppsättning noder vilka är kopior av noderna i listan b. Lösning Lösningen till detta problem heter att överlagra operatorer (operator overloading) som ger möjligheten att omdefiniera innebörden av operatorer för användardefinierade klasser. I detta fall vill vi överlagra operatorn = Låt oss titta på exemplet med listan igen för att förstå vad som händer List a: List b; a = b; //a = b; kommer av kompilatorn att översättas till a.operator=(b); Här ser vi att vad som sker är egentligen inget annat än ett operationsanrop. För listobjektet a anropas dess operation: List& operator=(const List& rhs);

10 Låt oss överlagra operatorn = för listan. class List public: List(); List(const List& originallist); ~List(); List& operator=(const List& rhs) //... private: Node *head; int size; ; List& List::operator=(const List& rhs) if(&rhs!= this) //delete all the nodes in this list object //copy all the nodes in rhs to this list object return *this; Några saker förtjänar att kommenteras. 1. Vad innebär, if(&rhs!= this)? 2. Vad innebär, return *this;? Först behöver vi klargöra vad this är, this är en pekare som finns i varje objekt och denna pekare refererar till sig själv. För ett listobjekt a, List a, refererar this-pekaren i a till a, alltså till sig själv. if(&rhs!= this) är därför ett skydd mot egentilldelning, d v s det är en kontroll av objektens identitet. Om någon gör följande; List a; a = a; kommer vi inte att utföra det som står inom if-satsen eftersom detta vore farligt. Varför är det farligt? Det bör du kunna lista ut. Denna kontroll mot egentilldelning måste alltid vara med då man definierar tilldelningsoperatorn. return *this; innebär att vi sist av allt returnerar objektet som ett alias. Att det returneras som ett alias ses av returtypen för tilldelningsoperatorn, den är List&. Detta ska göras för att möjliggöra kedjad tilldelning som innebär att fler än två objekt ingår i en kedja av tilldelningar.

11 List a: List b; List c; a = b = c; //Kedjad tilldelning Låt oss titta på vad som händer. Som ni redan vet sker tilldelning från höger till vänster, därför tilldelas först c till b (b = c). b.operator=(c); reslutatet av denna operation ska sedan tilldelas a, eftersom det är innebörden av att b tilldelas a (a = b). Men för att det ska gå att tilldela b till a måste ju, b.operator=(c); returnera något. Vad ska returneras? Jo, b självt, alltså this. Hela uttrycket a = b = c; översätts därför av kompilatorn till: a.operator=(b.operator=(c)); Alla klasser som har en icketrivial destruktor behöver en användardefinierad tilldelningsoperator. Anmärkning: Vi kommer i PUMA-kursen endast att titta på överlagring av operatorn = och ska inte göra en djupdykning i ämnet men det ska sägas att överlagring av operatorer generellt är en mycket kraftfull mekanism i C++. Många operatorer kan överlagras och ges en speciell innebörd. Den intresserade studenten rekommenderas att själv undersöka detta ämne djupare.

12 3.5 Gemensamma faktorer mellan copy-konstruktorn, destruktorn och tilldelningsoperatorn Implementationen av copy-konstruktorn, destruktorn och tilldelningsoperatorn har en hel del gemensamt. //Implementation av copy-konstruktorn List::List(const List& originallist) //Copy all the nodes in "originallist" to this list object //Implementation av destruktorn List::~List() //delete all the nodes in this list object //Implementation av tilldelningsoperatorn List& List::operator=(const List& rhs) if(&rhs!= this) //delete all the nodes in this list object //copy all the nodes in rhs to this list object return *this; Om du tittar på ovanstående implementationer så ser du att i copy-konstruktorn kopierar man noderna, i destruktorn tar man bort noderna och i tilldelningsoperatorn gör man bådadera. Två operationer, som ska vara privata medlemsoperationer, blir då uppenbara: void List::copy(const List& originallist) //copy all the nodes in "originallist" to this list object void List::free() //delete all the nodes in this list object

13 Implementationen av copy-konstruktorn, destruktorn och tilldelningsoperatorn blir då: List::List(const List& originallist) copy(originallist); List::~List() free(); List& List::operator=(const List& rhs) if(&rhs!= this) free(); copy(b); return *this; Anmärkning: De gemensamma faktorerna mellan copy-konstruktorn, destruktorn och tilldelningsoperatorn är inte specifika för en lista. Listan har använts som ett exempel för att ni är bekanta med denna. De gemensamma faktorerna gäller oavsett vilken klass ni implementerar. Utnyttja detta faktum! 3.6 Summering Varje klass har fyra speciella medlemsoperationer: default-konstruktorn, copy-konstruktorn, destruktorn och tilldelningsoperatorn. Om dessa inte explicit deklareras och definieras av programmeraren så genereras de implicit. Du måste alltid definiera en copy-konstruktor då du har en icketrivial destruktor. Du måste alltid definiera en tilldelningsoperator då du har en icketrivial destruktor. Alternativet är att inte tillåta kopiering och/eller tilldelning, detta kan du göra genom att deklarera copy-konstruktorn och/eller tilldelningsoperatorn som privata. (Detta är dock specialfall och ska användas med eftertanke och återhållsamhet.) Ta för vana att alltid definiera copy-konstruktorn, destruktorn och tilldelningsoperatorn, då kan du vara säker på att minneshanteringen går rätt till. Ta också för vana att definiera åtminstone en konstruktor, det behöver inte vara defaultkonstruktorn, det är inte alltid den är vettig att ha med i klassen.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

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

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

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

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

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

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

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

(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

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

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

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

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

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

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall

Läs mer

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

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

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

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

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

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

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

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

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

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

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

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

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

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

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

Läs mer

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

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

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

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

F8: Typkonvertering i C++

F8: Typkonvertering i C++ Institutionen för datavetenskap Umeå Universitet F8: Typkonvertering i C++ Objektorienterad programmering för ingenjörer, VT04 Innehåll Implicit konvertering Konverteringskonstruktor Konverteringsoperator

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

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

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

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

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

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

maxlist-1. Indexerad lista Länkad lista

maxlist-1. Indexerad lista Länkad lista Datorer och programmering TDB2: Lista - en dynamisk datastruktur Eva Pärt-Enander Vad är en lista? En lista är en sekventiell struktur oftast av likadana saker. Listor denieras i C++ ofta med hjälp av

Läs mer

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

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

Polymorfi. Objektorienterad och komponentbaserad programmering

Polymorfi. Objektorienterad och komponentbaserad programmering Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende

Läs mer

Initiering och tilldelning

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

Läs mer

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

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 6: Metoder och fält (arrays) TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden

Läs mer

Inledande programmering med C# (1DV402) Tärningarna ska kastas

Inledande programmering med C# (1DV402) Tärningarna ska kastas Tärningarna ska kastas Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public

Läs mer

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Föreläsning 7 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Konstanter och readonly Statiska klasser Standardklassen Math Parameteröverföring Referensen

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via

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

F5: Högnivåprogrammering

F5: Högnivåprogrammering 1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data

Läs mer

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar Dynamiskt minne Agenda Vad är dynamiskt minne Motivering Hur gör man i C Övningar Minne Datorns primärminne används till olika ändamål De flesta system partitionerar minnet efter användningen: Programkoden

Läs mer

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 20 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 20 Internminne

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Funktionens deklaration

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

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

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

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

*Pekarvärden *Pekarvariabler & *

*Pekarvärden *Pekarvariabler & * *Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)

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

Objekt och klasser - Introduktion

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

Läs mer

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp. Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Att instansiera en klass Objekt I Man instansierar (skapar

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

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

5 Arv och dynamisk bindning FIGUR

5 Arv och dynamisk bindning FIGUR 5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig

Läs mer

Ö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

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

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

Objektorienterad programmering Föreläsning 5

Objektorienterad programmering Föreläsning 5 Objektorienterad programmering Föreläsning 5 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda UML Övning Mer om metoder Standardklassen String Konstruktorer Överlagrade metoder Standardklassen

Läs mer

OOP Objekt-orienterad programmering

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

Läs mer

DAT043 - Föreläsning 7

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

Läs mer

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad Programmering (OOP) Murach s: kap 12-16 Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block,

Läs mer

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning X: Klass diagram, inkapsling, arv Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Instansiering Åtkomst Abstrakt datatyp UML Överlagring

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

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer