5 Arv och dynamisk bindning FIGUR
|
|
- Ebba Amanda Lindberg
- för 8 år sedan
- Visningar:
Transkript
1 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 del av systemarbetet. Arvsrelationer kan vara både specialiseringar och generaliseringar. Specialisering innebär att man från en basklass hittar subklasser. Generalisering innebär att man samlar ihop subklasser till en basklass. Arvsrelationen kontrolleras med frågan 'är en'. Elefant är ett däggdjur. Dialogfönster är ett fönster osv. Arv är ett steg mot att programmera med återanvändbara komponenter. Man har en färdig fönsterklass (komponent) som man själv kan modifiera till en önskad subfönsterklass genom att lägga till data och funktioner eller förändra funktionaliteten genom att överlagra funktioner. Ex : En rektangel är en figur och en cirkel är en figur. Ska man använda både rektanglar och cirklar i sitt system är det lämpligt att generalisera och använda en basklass figur som håller reda på sådant som är gemensamt, som exempelvis namnet medan subklasserna håller reda på det som är speciellt, exempelvis sidornas längder för rektangeln och radiens längd för cirkeln. FIGUR CIRKEL REKTANGEL // specifikation av klassen FIGUR -- figur.h #ifndef FIGURH #define FIGURH class FIGUR char namn[20]; FIGUR(char *namn = ""); ~FIGUR(); void skriv(); ; #endif 83
2 OBS! Villkorlig kompilering för att undvika kompileringsfel på grund av dubbla definitioner av klassen FIGUR eftersom figur.h kommer att inkluderas av både rektang.h och cirkel.h. // implementation av klassen FIGUR -- figur.cpp #include "figur.h" #include <cstring> #include <iostream> using namespace std; FIGUR::FIGUR(char *namn) strcpy(this->namn, namn); FIGUR::~FIGUR() void FIGUR::skriv() cout << endl << "Figurnamn : " << namn << endl; // specifikation av klassen REKTANGEL -- rektang.h #include "figur.h" class REKTANGEL : public FIGUR // OBS! Ärver FIGUR float s1, s2; REKTANGEL(char *namn, float s1, float s2); ~REKTANGEL(); float area(); void skriv(); ; 84
3 // implementation av klassen REKTANGEL -- rektang.cpp #include "rektang.h" #include <iostream> using namespace std; REKTANGEL::REKTANGEL(char *namn, float s1, float s2) :FIGUR(namn) // OBS! Anropar baskonstruktor this->s1 = s1; this->s2 = s2; REKTANGEL::~REKTANGEL() float REKTANGEL::area() return s1*s2; void REKTANGEL::skriv() FIGUR::skriv(); cout << "Sida 1 : " << s1 << endl; cout << "Sida 2 : " << s2 << endl; // specifikation av klassen CIRKEL -- cirkel.h #include "figur.h" class CIRKEL :public FIGUR float r; CIRKEL(char *namn, float r); ~CIRKEL(); float area(); void skriv(); ; // OBS! Ärver FIGUR 85
4 // implementation av klassen CIRKEL -- cirkel.cpp #include "cirkel.h" #include <iostream> using namespace std; CIRKEL::CIRKEL(char *namn, float r) :FIGUR(namn) // OBS! Anropar baskonstruktor this->r = r; CIRKEL::~CIRKEL() float CIRKEL::area() const float pi = ; return r*r*pi; void CIRKEL::skriv() FIGUR::skriv(); cout << "Radie : " << r << endl; OBS! REKTANGEL-klassen och CIRKEL-klassen ärver medlemsvariabeln namn från basklassen. Objekt av klassen CIRKEL kommer alltså att ha värden på både namn och radie. Även om CIRKEL ärver namn från basklassen kan inte CIRKEL använda namn direkt vid exempelvis utskriften. Även subklasser måste gå via de publika medlemsfunktionerna. Vill man ge subklasser tillåtelse att använda medlemsvariabler direkt ska man definiera dessa protected istället för private i basklassen. Medlemmar som är protected kan refereras direkt av subklasser men ej av andra. OBS! Medlemsfunktionen skriv ärvs också av subklasserna men här ändras funktionaliteten genom att funktionen omdefinieras (överlagras) i subklassen. Då skriv anropas av CIRKEL-objektet kommer denna överlagrade funktion att användas. OBS! Basklassens konstruktor anropas alltid före subklassens. Parametrar till basklassens konstruktor måste överföras via subklassens konstruktor (jfr medlemsobjekt). Basklassens destruktor anropas alltid efter subklassens. Här finns inga problem med parametrar då destruktorn ej får ha några. 86
5 // huvudprogram -- figurmai.cpp #include "cirkel.h" #include "rektang.h" void main() CIRKEL cir("cirkel", 1.0); REKTANGEL rek("rektangel", 2.0, 4.5); FIGUR fig, *fp; cir.skriv(); cout << "Area : " << cir.area() << endl; rek.skriv(); cout << "Area : " << rek.area() << endl; fig = cir; fig.skriv(); fp = ○ fp->skriv(); Utskriften blir : Figurnamn : Cirkel Radie : 1 Area : Figurnamn : Rektangel Sida1 : 2 Sida2 : 4.5 Area : 9 Figurnamn : Cirkel Figurnamn : Cirkel OBS! Det går att tilldela objektet cir av subklassen CIRKEL till objektet fig av basklassen FIGUR, men ej tvärtom. Vid tilldelningen tappar man bort radie eftersom objekt av klassen FIGUR ej har någon sådan medlemsvariabel. 87
6 OBS! Det går också att tilldela adressen för objektet cir av subklassen CIRKEL till en pekare fp av basklassen FIGUR. Objektet blir dock av typen FIGUR och FIGUR:s skrivfunktion körs. Man kan dock med hjälp av virtual-markering framför skrivfunktionen, ange att den ska bindas dynamiskt dvs bindas då pekaren vet vilket objekt den pekar på. class FIGUR char namn[20]; FIGUR(char *namn = ""); ~FIGUR(); virtual void skriv(); ; // OBS! virtual Utskriften blir nu istället : Figurnamn : Cirkel Radie : 1 Area : Figurnamn : Rektangel Sida1 : 2 Sida2 : 4.5 Area : 9 Figurnamn : Cirkel Figurnamn : Cirkel Radie : 1 // OBS! Den sista utskriften anropar subklassens CIRKEL skrivfunktion även om man utnyttjar en pekare till basklassen FIGUR. Genom att vi angett virtual framför skrivfunktionen kommer denna att bindas till aktuellt objekt dynamiskt alltså under körning. Detta kallas dynamisk bindning. 88
7 5.1 Dynamisk bindning Dynamisk bindning innebär att man under programkörningen överlåter åt programmet att leta upp rätt funktion för aktuellt subobjekt. Man definierar en pekare till en basklass och tilldelar denna pekare adressen till olika subobjekt. Genom dynamisk bindning kommer rätt funktion att anropas vid rätt tillfälle. Man kan exempelvis köra igenom en hel lista av subobjekt och varje gång anropas korrekt subobjekts medlemsfunktion. Ofta används basklassen enbart som en abstrakt klass dvs man skapar aldrig några verkliga objekt av basklassen utan enbart pekare med vars hjälp man pekar ut subobjekt. Som tillverkare av klasser kan man tvinga användare att använda basklassen enbart som en abstrakt klass genom att tilldela de virtuella funktioner, som man vill ska omdefinieras, värdet 0 (NULL) vid specifikationen. Man säger att funktionen nu är äkta virtuell. Definierar ej användaren om äkta virtuella funktioner i sin subklass blir även subklassen abstrakt och eftersom man ej kan skapa objekt av abstrakta klasser, kan man ej deklarera objekt av subklassen heller o.s.v. Ex : Gör om klassen FIGUR till en abstrakt basklass genom att göra areafunktionen äkta virtuell. // specifikation av klassen FIGUR class FIGUR char namn[20]; FIGUR(char *namn = ""); virtual ~FIGUR(); virtual void skriv(); virtual float area() = 0; ; // OBS! Klassen blir abstrakt // huvudprogram -- figurmai.cpp #include "cirkel.h" #include "rektang.h" void main() CIRKEL cir("cirkel", 1); REKTANGEL rek("rektangel", 2, 4.5); FIGUR fig; // Kompileringsfel! Kan ej skapa objekt // av abstrakta klasser. FIGUR *fp; fp = ○ fp->skriv(); cout << "Area : " << fp->area(); fp = &rek; fp->skriv(); cout << "Area : " << fp->area(); 89
8 Utskriften blir nu : Figurnamn : Cirkel Radie : 1 Area : Figurnamn : Rektangel Sida1 : 2 Sida2 : 4.5 Area : 9 Samma resultat hade man åstadkommit med nedanstående program som allokerar subobjekten dynamiskt : #include "cirkel.h" #include "rektang.h" void main() FIGUR *fp; fp = new CIRKEL("Cirkel", 1); fp->skriv(); cout << "Area : " << fp->area(); delete fp; fp = new REKTANGEL("Rektangel", 2, 4.5); fp->skriv(); cout << "Area : " << fp->area(); delete fp; OBS! Destruktorn måste också definieras virtuell eftersom annars körs endast basklassens destruktor. Definierar man destruktorn som virtuell kommer subklassens destruktor att köras först och därefter basklassens. 90
9 Ex : I kylsystemet har man ett stort antal VVS-komponenter som man ska löpa igenom och göra beräkningar och regleringar på. Här är det lämpligt att definiera en basklass, VVS och göra en länkad lista av VVS-komponenter som man löper igenom varje cykel. Varje subklass har en dynamikfunktion som utför beräkningarna. Genom dynamisk bindning körs rätt dynamikfunktion vid rätt tillfälle. komplista Ventil1 Ventil2 Pump Filter Ventil3 Komplista, som blir av typen stack, skapas i konstruktorn för klassen KYLSYSTEM enligt: class KYLSYSTEM.... ; VVS *komplista; NOD *np1, *np2, KYLSYSTEM::KYLSYSTEM().... komplista = NULL; np1 = new NOD(komplista,....);.... I de olika händelsefunktionerna skaffar man sig en lokal iterator kp med vars hjälp man löper igenom listan med komponenter enligt exempelvis: void KYLSYSTEM::timer_Tick(Object *Sender, eventargs *e) VVS *kp = komplista; while (kp) kp->dynamik(); kp->display(); kp = kp->get_next(); 91
10 jälva hoplänkningen av komponenterna sker i konstruktorn för VVS-klassen enligt: class VVS VVS *next; // pekare till nästa komponent protected: char namn[10]; // namn på komponenten int x, y; // koordinater VVS( VVS *&next, char *namn, int x, int y); // konstruktor virtual void dynamik() // dummy dynamik virtual void display() // dummy display VVS *get_next(); // nästa komponent..... VVS::VVS(VVS *&next, char *namn, int x, int y) this->next = next; next = this; strcpy(this->namn, namn); this->x = x; this->y = y; VVS *VVS::get _next() return next; OBS! *& är en referens till en pekare. Detta måste man ha för att kunna ändra pekarvärdet next då nya komponenter stoppas in. OBS! Medlemsvariablerna namn, x och y är märkta protected vilket innebär att de kan användas direkt av en subklass som VENTIL (se nedan) men däremot ej av instansierade objekt.. OBS! Hur man utnyttjar this-pekaren för att länka ihop komponenterna och ge nextparametern ett nytt värde. Alla objekt har en this-pekare som pekar på sig själv. OBS! Här har man valt att ej definiera dynamikfunktionen äkta virtuell. Detta innebär att VVS-klassen ej blir abstrakt. Man kan alltså skapa objekt av klassen VVS och det kan finnas subklasser, som ej har någon överlagrad dynamikfunktion och som man också kan skapa objekt av. 92
11 VENTIL-klassen ärver all data från VVS-klassen och man lägger till de data och de funktioner som är speciella för ventiler. Man ska också förändra VENTIL-objektens funktionalitet gentemot VVS-objekten genom att definiera en ny överlagrad dynamikfunktion istället för den dynamikfunktion i VVS som inte gör någonting. Detsamma gäller display, rita, klick etc. class VENTIL : public VVS // OBS! Ärver från VVS float f; NOD *in; NOD *ut;... // flödet i ventilen // in-nod // ut-nod ; VENTIL(VVS *&next, char *namn, int x, int y, NOD *in, NOD *ut); void dynamik();... VENTIL::VENTIL(VVS *&next, char *namn, int x, int y, NOD *in, NOD *ut) : VVS(next, namn, x, y) this->in = in; this->ut = ut; OBS! Hur man överför parametrar till basklassens konstruktor genom att i subklassens initieringslista vissa parametrar slussas vidare till anropet av basklassens konstruktor. Basklassens konstruktor körs alltid innan subklassens. 93
12 En klass kan ses som en server som kan ha två olika typer av klienter: 1) Användarklient : En klient som via objekt eller pekare till objekt av klassen använder de publika medlemmarna. 2) Arvsklient : En klient som skapar nya subklasser genom att ärva data och funktioner från klassen. En tillverkare av en server-klass bestämmer själv hur medlemmarna ska skyddas mot klienterna genom att markera medlemmarna som private, protected eller public. För en användarklient innebär detta att enbart de publica medlemmarna kan användas emedan en arvsklient kan utnyttja både protected- och public-medlemmar. En arvsklient kan dessutom ange hur den ska ärva egenskaper public, protected eller private enligt : eller eller class SUBKLASS : public BASKLASS class SUBKLASS : protected BASKLASS class SUBKLASS : private BASKLASS Hur man som arvsklient ärver inverkar på fortsättningen av arvskedjan och användarkedjan. Ärver man public så får subklassen samma skydd mot nya klienter som basklassen. Ärver man protected ändras skyddet för de ärvda publica medlemmarna från basklassen till protected i subklassen och dessa kan alltså ej användas av användarklienter till subklassen utan bara av arvsklienter. Ärver man private blir alla ärvda medlemmar från basklassen private i subklassen och kan ej användas av några klienter alls utan det är bara subklassen själv som kan utnyttja de ärvda medlemmarna. På detta sätt kan man bryta en arvskedja och stoppa vidare arv. 94
13 5.2 Multipelt arv Arv kan man utnyttja i många steg. En kvadrat är en rektangel och en rektangel är en figur. Man kan också i C++ ha multipelt arv dvs man kan ärva från flera klasser. Här ska man egentligen fråga sig om ett subobjekt är ett basobjekt 1 och ett basobjekt 2. Ex: En student 'är både en' kårmedlem och en låntagare på biblioteket och ärver exempelvis medlemsnummer från kårmedlem och låntagarnummer från låntagare. Ofta använder man också multipelt arv då en klass ärver egenskaper från flera andra klasser utan att man egentligen kan säga att objekt av klassen är objekt av båda de klasser som man ärver ifrån. Ex: En avrundad rektangelklass, AVREK, som består av en rektangel med cirkelrundade kortsidor, ärver egenskaper från både CIRKEL och REKTANGEL enligt : FIGUR CIRKEL REKTANGEL AVREK 95
14 // specifikation av klassen AVREK -- avrek.h #include "rektang.h" #include "cirkel.h" class AVREK : public REKTANGEL, public CIRKEL // OBS! AVREK(char *namn, float sida, float radie); float area(); void skriv(); ; // implementation av klassen AVREK -- avrek.cpp AVREK::AVREK(char *namn, float sida, float radie) : REKTANGEL(namn, sida, 2*radie), CIRKEL(namn, radie) // OBS! float AVREK::area() return REKTANGEL::area() + CIRKEL::area(); void AVREK::skriv() REKTANGEL::skriv(); // huvudprogram -- avrekmai.cpp #include "avrek.h" void main() AVREK avr("avrek", 100, 25); avr.skriv(); cout << "Area :" << avr.area() << endl; Vid multipelt arv uppstår två problem : 1) Om det finns medlemmar med samma namn i de klasser man ärver från protesterar kompilatorn. Detta kan man lösa genom att använda globaloperatorn :: eller genom att definiera om medlemmen inuti den nya klassen. I ovanstående exempel definierar man om funktionen skriv i AVREKklassen och då har kompilatorn inga problem med att hitta rätt funktion. Hade man inte gjort någon ny skrivfunktion i AVREK skulle man ha fått kompileringsfel vid anropet avr.skriv(). 96
15 2) Data från bas-bas-klassen FIGUR ärvs dubbelt av AVREK. Detta innebär att objektet avr innehåller namnsträngen två gånger vilket är slöseri med minne. För att slippa detta kan man se till att klasserna REKTANGEL och CIRKEL ärver FIGUR-klassen virtual enligt : class REKTANGEL : virtual public FIGUR // OBS! virtual... ; class CIRKEL : virtual public FIGUR // OBS! virtual... ; ingen Nu har man bara ett namn i AVREK-klassen men frågan är vilken av klasserna REKTANGEL eller CIRKEL anropar FIGUR:s konstruktor? Svaret är att av dem anropar konstruktorn eftersom de ärver virtuellt. Man måste anropa FIGUR:s konstruktor explicit från AVREK enligt : // implementation av klassen AVREK -- avrek.cpp AVREK::AVREK(char *namn, float sida, float radie) : REKTANGEL(namn, sida, 2*radie), CIRKEL(namn, radie),, FIGUR(namn) // OBS!... Multipelt arv är ett omtvistat kapitel inom objektorientering. Många objektorienterade språk saknar denna möjlighet medan andra, som C++, har den implementerad. Man märker av ovanstående exempel att multipelt arv kan ställa till problem. Regeln som man bör ha är att använda multipelt arv i yttersta nödfall. Kan man undvara multipelt arv så bör man göra det. Ovanstående exempel kunde man ha löst med en aggregatrelation. AVREK består av ett REKTANGEL-objekt och ett CIRKEL-objekt. 97
16 Ex: Skriv om klassen AVREK ovan så att den istället för arv använder REKTANGELobjekt och CIRKEL-objekt som medlemsobjekt. // specifikation av klassen AVREK -- avrek.h #include "rektang.h" #include "cirkel.h" class AVREK REKTANGEL rek; CIRKEL cir; AVREK(char *namn, float sida, float radie); float area(); void skriv(); ; // implementation av klassen AVREK -- avrek.cpp AVREK::AVREK(char *namn, float sida, float radie) : rek(namn, sida, 2*radie), cir(namn, radie) // OBS! float AVREK::area() return rek.area() + cir.area(); void AVREK::skriv() rek.skriv(); // huvudprogram -- avrekmai.cpp #include "avrek.h" void main() AVREK avr("avrek", 100, 25); avr.skriv(); cout << "Area :" << avr.area() << endl; 98
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
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
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
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.
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
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
Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr, 051019
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Må 24/10 och kan då hämtas på
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
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
Arv. Objektorienterad och komponentbaserad programmering
Arv Objektorienterad och komponentbaserad programmering Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett
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
2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
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
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
3 Klasser och objekt
3 Klasser och objekt Med klassbegreppet kan man definiera sina egna abstrakta datatyper i C++. Man kan bygga ut språket med egna typer (klasser), utöver de vanliga int, char etc. Objekten, med vars hjälp
1 Objektorienterad programkonstruktion
1 Objektorienterad programkonstruktion Ett program bearbetar data eller information inom något område av vår verklighet. Själva arbetet att skriva programmet, implementationsfasen, föregås alltid av först
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
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
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap 1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 21 Internminne
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
Arv bakgrund (kap. 9)
Föreläsning 4 Arv bakgrund (kap. 9) Hund pälsfärg favoritben smutsa_ned() ät_katt() Kanin pälsfärg slaktvikt smutsa_ned() Katt pälsfärg smutsa_ned() klös_soffa() Arv bakgrund Många klasser delar på egenskaper
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
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
ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.
1(9) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13. Denna tenta kommer att vara färdigrättad Fr 28/1 och kan då hämtas på
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
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
TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap
TDP004 Minne och pekare Eric Elfving Institutionen för datavetenskap 1 / 23 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor 2 / 23 Internminne - RAM Datorns internminne (RAM,
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
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag
Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje
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
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
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),
TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00
TENTAMEN CD5250 Objektorienterad programutveckling med C++, 5p Max poäng: 40 Betygsgränser: 3: 20 4: 28 5: 36 Datum: 1999-06-01, Tid: 14:00-19:00 Ansvarig: Ivica Crnkovic Upp till 5 poäng kan komma från
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
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,
DD2387 Programsystemkonstruktion med C++ Tentamen 2
DD2387 Programsystemkonstruktion med C++ Tentamen 2 Måndagen den 10 november 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor.
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin
Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna
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
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
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[]
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
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Klas Arvidsson Institutionen för datavetenskap 1 / 33 UML UML är ett grafiskt språk som (bland mycket annat) används för
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
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
Klasshierarkier - repetition
Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet
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
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,
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
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
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
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
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 +,
Laboration 1: Figurer i hierarki
Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras
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
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
Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del
Tentamen i TDP004 Objektorienterad Programmering Teoretisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
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
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
ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19.
1(9) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19. Denna tenta kommer att vara färdigrättad Må 22/8 och kan då hämtas på
För alla uppgifter på tentan gäller: Man får använda både standard-c++ (som till exempel har pekare som anges med * och objekt som skapas med new) och
Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se) Tentamen i Objektorienterad programmering för D2 m fl onsdag 1 november 2006 kl 14:00-19:00 i L003
Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
Föreläsning 13 Innehåll
Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?
Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1
Objektorienterad programmering Vi började med att programmera i main, sedan gick vi vidare till flera metoder i en klass. Nu är det dags för flera klasser. Objektorienterad programmering Relationer mellan
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
Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson
Högskolan Dalarna sid 1 av 5 Lösningsförslag till TENTAMEN I OBJEKTORIENTERAD PROGRAMMERING 5p,för D2 1999-01-14 1. a) Systemavgränsningen är dokument som innehåller en kortfattad beskrivning av vad som
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6 Pontus Haglund och Gustav L'estrade anpassade slides av Klas Arvidsson Department of Computer and information science 1 Arv (Specialisering)
Övning 4. Arv och andra relationer
Högskolan Dalarna Objektorienterad Analys & Konstruktion, 10p 1 Övning 4. Arv och andra relationer Stegvis förfining som programutvecklingsmetodik Det är mycket viktigt att du jobbar stegvis när du utvecklar
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng Klasser som skall bli "envisa" Klassen Anstelld skall
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
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
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ÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Ö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ÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20
LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 Betygsgränser: 3 16 poäng 4 23 poäng 5 30 poäng Maxpoäng: 36 poäng Hjälpmedel: inga Lycka till Per Ekeroot Uppgift 1 Kortfrågor
Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim
Objektorienterad programmering Föreläsning 12 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Introduktion till Arv Superklasser och Subklasser Dolda medlemmar (new och base) Statisk
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
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
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
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
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.
UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.
Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel
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
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
Objektorienterad programmering
Objektorienterad programmering Föreläsning 19 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda Konstruktion av egna grafiska komponenter Kontsruktion av egen komponent Att rita upp
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
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
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,
C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen
C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt
Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt
Föreläsning 4 Klasser Och Objekt Klass Beskrivning av en objekttyp Beskriver egenskaper och beteende (fält och metoder) Klassen fungerar som en ritning Objekt skapas från klassbeskrivningen - instansieras
Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare
Vad är en pekare? Varför använder vi pekare? Hur används pekare? Hur deklarerar vi pekare i C? Hur kommer vi åt pekarvärdet? DAVA07/08 JE,MG,MG,PS 2 DAVA07/08 JE,MG,MG,PS Vad är en pekare? En pekare är
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
Problemet. Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism)
Föreläsning 5 Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public Fordon Bil(Person & owner) : Fordon(owner) } // Den
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.
Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).
3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av 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
JAVAUTVECKLING LEKTION 11
JAVAUTVECKLING LEKTION 11 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Mer om klasser och objekt Statiska/instans-metoder Överlagrade metoder Inkapsling Konstruktorer 1 UPPGIFT