'\QDPLVNELQGQLQJ. 3RO\PRUILQnJUD EHJUHSS. 3RO\PRUIL ² (Q YLVV NRQVWUXNWLRQ NDQ H[HNYHUDV Sn ROLND VlWW

Relevanta dokument
3URJUDPE\JJQDGVNRQVWHQV HOHPHQW $EVWUDNWDGDWDW\SHURFK 'DWDVWUXNWXUHU $EVWUDNWDGDWDW\SHU +HOWDO/LVWD6WDFN. 7DEHOO

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

Polymorfi. Objektorienterad och komponentbaserad programmering

Arv. Objektorienterad och komponentbaserad programmering

Dynamisk bindning och polymorfism

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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


OKIFAX hjälpguide

Introduktion till arv

Börja med at t st art a programmet Word. menyfält et. välj däreft er at t klicka på %LOGREMHNW och vidare på :RUG$UW. Tillbaka.

FINLANDS FÖRFATTNINGSSAMLINGS FÖRDRAGSSERIE ÖVERENSKOMMELSER MED FRÄMMANDE MAKTER

5 Arv och dynamisk bindning FIGUR


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

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

TDDC76 - Programmering och Datastrukturer

- från idé 2ll produkt

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Kirunakortet. Fiska i Norrbottens fjällvatten. Fiska i Kiruna. Välkommen till Norrbottensfjällen!

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

TDDC76 Programmering och datastrukturer

TDDC76 - Programmering och Datastrukturer

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

Funktionens deklaration

,QI UDQGHW DY HXURQ NRPPLVVLRQHQ UHGRJ U LQJnHQGH I U I UEHUHGHOVHUQD RFK I UHVOnU WMXJR

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

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

Jokkmokkskortet. Fiska i Norrbottens fjällvatten. Välkommen till Norrbottensfjällen! Fiska i Jokkmokk

+LVWRULHQ. .XUVLQQHKnOO 2EMHNWRULHQWHUDGSURJUDPXWYHFNOLQJ ª 2EMHNWRULHQWHUDGDQDO\V ª 2EMHNWRULHQWHUDGGHVLJQ ª 2EMHNWRULHQWHUDGSURJUDPPHULQJ

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

Tillämpad programmering

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

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

Programsystemkonstruktion med C++

Pdf- filer kräver et t hjälpprogram som het er Adobe Acrobat Reader. Acrobat Reader är en grat is programvara som du kan hämt a på den här sidan.

Uppdraget. Växtstrategi för den lilla staden ² GHW ÀQQV UHFHSW. rubriker enligt programmets uppdragsbeskrivning:

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

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

Rapport Biogas till fordonsgas i Umeåregionen en förstudie

Grattis Yvonne Augustin

Klasshierarkier - repetition

Tillämpad programmering

FINLANDS FÖRFATTNINGSSAMLING

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

69()2V IRWRXWIO\NW WLOO V GUD 'DODUQD GHQ VHSWHPEHU

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

Problemet. Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism)

bu YLOMDQ DWW VNDSD VXQGD RIIHQWOLJD ILQDQVHU WLOOUlFNOLJWVWDUNL(XURSD"

Arv bakgrund (kap. 9)

Fiska i Norrbottens fjällvatten. Välkommen till Norrbottensfjällen! Fiska i Arjeplog. Arjeplogskortet

Prislista & Produktinformation

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

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

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

2.7$*21(1. +DQGOHGQLQJ I U WLOOlPSQLQJ Sn HQVNLOGD RUJDQLVDWLRQHU. (1 0(72' )g5.$3$&,7(76%('g01,1* 3HWHU :LQDL $QGHUV,QJHOVWDP -XQL 5334

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

#include <stdio.h> #include <string.h>

Objektorientering - Arv och polymorfi

Synlighet. Namespace Scope-operatorn Klasser Vänner

1 Klasser och objektorientering Vad är objektorientering?

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

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

Föreläsning 13 Innehåll

Konstruktion av klasser med klasser

DD2387 Programsystemkonstruktion med C++ Tentamen 2

TDIU01 Programmering i C++

Tentamen i Objektorienterad programmering för ingenjörer (TDBB09) , kl

TDDC76 - Programmering och Datastrukturer

Reinfeldt hycklar om vården

SWE ANVÄNDARHANDBOK. Batteri Pellenc-verktyg 1200 / 1500

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

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Datorövningar. Grunderna i C/C++

Kapitel 6 - Undantag

OOP Objekt-orienterad programmering

Value of audit trails as evidence 1

IT-INFRASTRUKTURPROGRAM FÖR FALKENBERGS KOMMUN

Text och foto: Erik Söderholm.

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

.RPPLVVLRQHQ I UHVOnU Q\ SHUVRQDOSROLWLN ± IUnQ UHNU\WHULQJHQWLOOSHQVLRQHQ

C++ Slumptalsfunktioner + switch-satsen

Fasadbelysning i Stockholm. I samarbete med

Grisbäckens avrinningsområde

Övningstentamen, akustikdelen i MTC947, HT2004

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Nya LTS-högtalaren är på G!

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

TDDC76 - Programmering och Datastrukturer

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

TDDC76 - Programmering och Datastrukturer

Övning 4. Arv och andra relationer

0,/-g%,/' $QYLVQLQJDUI UVPnKXVE\JJDUHL6LEER

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

Tentamen. Lösningsförslag

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Behovsanalys och markanspråk

Transkript:

3RO\PRUILQnJUD EHJUHSS Poly - 1 '\QDPLVNELQGQLQJ Poly - 2 3RO\PRUIL ² (Q YLVV NRQVWUXNWLRQ NDQ H[HNYHUDV Sn ROLND VlWW 7LGLJHOOHUVWDWLVNELQGQLQJ ² 9LONHQ IXQNWLRQ VRP VNDOO DQURSDV DYJ UV YLG NRPSLOHULQJHQ 6HQHOOHUG\QDPLVNELQGQLQJ ² 9LONHQ IXQNWLRQ VRP VNDOO DQURSDV DYJ UV YLG H[HNYHULQJHQ 9LUWXHOOIXQNWLRQ ² )XQNWLRQ VRP NDQ DQURSDV PHG G\QDPLVN ELQGQLQJ (Q JnQJ YLUWXHOO lu DOOWLG YLUXHOO 5HQWYLUWXHOOIXQNWLRQ ² (Q PHGOHPVIXQNWLRQ VRP VDNQDU GHILQLWLRQ 3RO\PRUINODVV ².ODVV VRP GHNODUHUDU HOOHU luyhu PLQVW HQ YLUWXHOO IXQNWLRQ $EVWUDNWEDVNODVV ² %DVNODVV PHG VDQQD YLUWXHOOD IXQNWLRQHU JnU HM DWW LQVWDQVHUD GYV VNDSD NODVVHU DY (Q EDVNODVVSHNDUH NDQ WLOOGHODV HQ SHNDUH WLOO HWW REMHNW DY HQ KlUOHGG NODVV //-Form------------------------------------- class Form virtual void draw(); //------------------------------------------ //-Cirkel----------------------------------- class Cirkel : public Form void draw(); //------------------------------------------ //-main------------------------------------- main() //OBS! En pekare av basklassens typ Form *formpekare = new Cirkel() formpekare->draw(); return 0; //------------------------------------------- 1

Exempel på dynamisk bindning, del a Poly - 3 Exempel på dynamisk bindning, del b Poly - 4 #include <iostream.h> #include "person.h" //-Student---------------------------------------------- class Student : public Person Student(const char *namn):person(namn) cout <<"Konstruktor Student\n"; ~Student() cout <<"Destruktor Student\n"; void write() cout <<"Student: " << getname() << endl; //-Fotbollspelare--------------------------------------- class Fotbollsspelare : public Student Fotbollsspelare::Fotbollsspelare(const char* namn):student(namn) cout <<"Konstruktor Fotbollspelare\n"; //-Orienterare------------------------------------------ class Orienterare : public Student Orienterare::Orienterare(const char* namn):student(namn) cout <<"Konstruktor Orienterare\n"; ~Orienterare() cout <<"Destruktor Orienterare\n"; void write() cout <<"Orienterare: " << getname() << endl; //-main------------------------------------------------- void main() Student *stina = new Fotbollsspelare("Stina"); stina->write(); delete stina; ~Fotbollsspelare() cout <<"Destruktor Fotbollsspelare\n"; void write() cout <<"Fotbollsspelare: " << getname() << endl; 6WXGHQW ""! µ'hvwuxnwru )RWEROOVSHODUHµ VDNQDV Programmets utskrift: Konstruktor Student Konstruktor Fotbollspelare Student: Stina Destruktor Student 2

Exempel på dynamisk bindning, del c Poly - 5 Abstrakt basklass. Resturang Oasen, del a Poly - 6 class Student : public Person Student(const char *namn):person(namn) cout <<"Konstruktor Student\n"; virtual ~Student() cout <<"Destruktor Student\n"; //OBS! virtual virtual void write() //OBS! virtual cout <<"Student: " << getname() << endl; void main() Student *stina = new Fotbollsspelare("Stina"); stina->write(); delete stina; (QGD I UlQGULQJHQ L SURJUDPPHW IUnQ I UHJnHQGH H[HPSHO lu DWW L NODVVHQ µ6wxghqwµ Vn KDU GHVWUXNWRUQ RFK PHGOHPVIXQNWLRQHQ µzulwhµ GHNODUHUDWV YLUWXHOOD )RWEROOVSHODUH! 'HVWUXNWRU )RWEROOVSHODUH! Programmets utskrift: Konstruktor Student Konstruktor Fotbollspelare Fotbollsspelare: Stina Destruktor Fotbollsspelare Destruktor Student #include <time.h> #include <stdlib.h> #include <string.h> #include <iostream.h> //-Hungrig---------------------------------------------- class Hungrig Hungrig() ~Hungrig() void konsumerar(restaurang *&valdmat); //-Restaurang------------------------------------------- class Restaurang Restaurang():smak(0)smak = new char[80]; virtual ~Restaurang()delete [] smak; =0; //Sann virtuell funktion! Detta medför att klassen // Restaurang förvandlas till en abstrakt basklass. protected: //protected medför att datamedlemmen smak blir //åtkomligheten i de klasser som ärver av Restaurang char *smak; 3

Abstrakt basklass. Resturang Oasen, del b Poly - 7 Abstrakt basklass. Resturang Oasen, del c Poly - 8 //-Mat-------------------------------------------------- class Mat : public Restaurang Mat()strcpy(smak,"Dagens rätt"); virtual ~Mat() strcat(smak, " är hyfsad."); //-StektSill-------------------------------------------- class StektSill : public Mat StektSill()strcpy(smak,"Sillen"); virtual ~StektSill() strcat(smak, " smakar knaprigt och salt."); //-Palt------------------------------------------------- class Palt : public Mat Palt()strcpy(smak,"Palt"); ~Palt() strcat(smak, " smakar alltid Gott!"); //-FaluKorv--------------------------------------------- class FaluKorv : public Mat FaluKorv()strcpy(smak,"Korven"); virtual ~FaluKorv() strcat(smak," är fantastisk!"); 4

Abstrakt basklass. Resturang Oasen, del d Poly - 9 Abstrakt basklass. Resturang Oasen, del e Poly - 10 //-Fika------------------------------------------------- class Fika : public Restaurang Fika()strcpy(smak,"En kopp fika"); virtual ~Fika() strcat(smak, " är aldrig fel."); //-Bulle------------------------------------------------ class Bulle : public Fika Bulle()strcpy(smak,"Nybakta Bullar"); virtual ~Bulle() strcat(smak, " är inte dumt."); //-Kaka------------------------------------------------- class Kaka : public Fika Kaka()strcpy(smak,"Kakorna"); virtual ~Kaka() strcat(smak, " var sliskiga"); //-konsumerar------------------------------------------- //Copy by referens!!! void Hungrig::konsumerar(Restaurang *&valdmat) if (valdmat!= 0) cout << valdmat->smakar() <<endl; delete valdmat; //Äter upp sin mat valdmat = 0; 5

Abstrakt basklass. Resturang Oasen, del f Poly - 11 'XVNDNXQQD«Poly - 12 - int main(void) Hungrig kallekula; Restaurang *meny[7]; meny[0] = new Mat(); meny[1] = new StektSill(); meny[2] = new Palt(); meny[3] = new FaluKorv(); meny[4] = new Fika(); meny[5] = new Bulle(); meny[6] = new Kaka(); srand(time(0)); int antal = 1 + rand()%7; for (int i=0; i<antal; i++) kallekula.konsumerar(meny[rand()%7]); cout <<endl <<"Tack för maten!" <<endl; for (i=0; i<7; i++) delete meny[i]; return 0; - Exempel på en utskrift Dagens rätt är hyfsad. En kopp fika är aldrig fel. Palt smakar alltid Gott! Sillen smakar knaprigt och salt. 'X VND NXQQD NlQQD WLOO GH YDQGOLJDVWH EHJUHSSHQ 'X VND YHWD KXU PDQ YlOMHU WLGLJ HOOHU VHQ ELQGQLQJ RFK YLOND NRQVHNYHQVHU GHWWD PHGI U 'X VND I UVWn VNLOOQDGHQ PHOODQ YDQGOLJD IXQNWLRQHU RFK YLUWXHOOD IXQNWLRQHU 'X VND I UVWn YDG HQ DEVWUDNW EDVNODVV lu RFK KXU PDQ DQYlQGHU HQ VnGDQ 'X VND NXQQD VNULYD SURJUDP VRP XWQ\WWMDU SRO\PRUIL Tack för maten! 6