Tillämpad programmering

Relevanta dokument
Tillämpad programmering

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

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

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

F8: Typkonvertering i C++

TDDC76 - Programmering och Datastrukturer

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

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

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

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

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

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

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

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

Programsystemkonstruktion med C++

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Introduktion till arv

Arv. Objektorienterad och komponentbaserad programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

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

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

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };

Classes och Interfaces, Objects och References, Initialization

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

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

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

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

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

F4. programmeringsteknik och Matlab

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

TDIU01 - Programmering i C++, grundkurs

TDDC76 Programmering och datastrukturer

Innehåll. Pekare Exempel

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

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

Innehåll. Pekare Exempel

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

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

Tentamen EDAF30 Programmering i C++

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

5 Arv och dynamisk bindning FIGUR

Objektorienterad Programmering (TDDC77)

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Programmering A. Johan Eliasson

Programmering för språkteknologer II, HT2011. Rum

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

(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

TDIU01 - Programmering i C++, grundkurs

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

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Övningar Dag 2 En första klass

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tillämpad Programmering (ID1218) :00-13:00

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

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

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

Lösningar för tenta 2 DAT043,

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Dynamisk bindning och polymorfism

float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

TDIU01 Programmering i C++

TDDC76 - Programmering och Datastrukturer

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

Tentamen OOP

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

TDDC76 - Programmering och Datastrukturer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

OOP Objekt-orienterad programmering

Föreläsning 8: Exempel och problemlösning

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

C++ - En introduktion

Polymorfi. Objektorienterad och komponentbaserad programmering

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

Objektorienterad Programmering (TDDC77)

Det finns många flaggor till g++,

Transkript:

Tillämpad programmering C++ polymorfism overload, cast, ärvning, template Johan Montelius 1

polymorfism Att se och använda en variabel, ett objekt eller en funktion i olika former overload olika versioner av samma funktion cast ändra en variabels typ dispatch hur hanterar vi objekthierarkier 2

print void print(int x) { cout << int x = << x << endl; void print(float x) { cout << float x = << x << endl; } 3

overload Funktioner med olika typer av argument är olika funktioner kompilatorn försöker hitta den rätta om flera alternativ finns genereras ett kompileringsfel 4

Student class Student { string name; string program; int year; public' Student(string &nn, string &prgm, int year); string getname() const; void setname(string &nn); void print(ostream &os) const; } 5

Student void Studentprint(ostream &os) { os << Student << name << << program << / << year; } 6

Student Student joe = Student( joe, ICT, 2011); joe.print(cout); 7

operator<< ostream &operator<<(ostream &os, Student &ss) { ss.print(os); return os; } cout << joe << endl; 8

operatorer Är operatorer metoder i en klass eller är de funktioner som är fristående från klasser? operator<< operator= 9

Rational class Rational { int num; // numeral - täljare int den; // denominator - nämnare public Rational(...,...)... ;... get_num()... ;... get_den()... ;... print(...)... ; 10

Rational +, -, * Rational operator+( const Rational lhs, const Rational rhs) { return Rational(num, den); } 11

ibland lite konstigt Student joe( Joe, ICT, 2011); Student sue( Sue, ICT, 2012); cout << joe + sue << endl; 12

cast - ändra en variabels typ static_cast kontroll vid kompilering dynamic_cast för pekare eller referenser till objekt, kontroll vid körning const_cast ta bort const från typen reinterpret_cast helt utan säkerhetsbälte 13

cast I C var det inte syntaktiskt klart hur långt ut på isen man var. Man bör tänka två gånger innan man tar till cast, det kan vara ett tecken på att man tänkt fel från början. 14

Objekt och ärvning class Person { int pnr; string name; public Person(int pp, const string &nn) pnr(pp), name(nn) { const string &getname() const { return name; void print(ostream &os) const { os << pnr << << name; 15

Objekt och ärvning class Student public Person { int year; public Student(int pp, const string &nn, int yy) Person(pp, nn), year(yy) { int &getyear() const { return year; void print(ostream &os) const { Personprint(os); os << << year; 16

fungerar int main() { Person joe(123, Joe ); Student sue(456, Sue, 2011); } joe.print(cout); sue.print(cout); cout << sue.getname() << << sue.getyear(); 17

lite annorlunda void print_person(const Person &p) { p.print(cout); } int main() { Student sue(456, Sue, 2011); } print_person(sue); 18

C++ static dispatch Metod bestäms vid kompilering och utgår från variabelns typ. dynamic dispatch (Java) Metod bestäms vid körning och utgår från objektets typ. 19

C++ Om det finns två sätt att göra det på så gör C++ det på båda sätten 20

virtual class Person { int pnr; string name; public Person(int pp, const string &nn) pnr(pp), name(nn) { const string &getname() const { return name; virtual void print(ostream &os) const { os << pnr << << name; 21

abstrakta klasser class Triangle { pos x, y, z; public double area(); int edges(); class Rectangle { pos x11,x12, x21, x22; public double area(); int edges(); 22

abstrakta klasser class Shape { public virtual double area(); virtual int edges(); class Triangle public Shape { pos x, y, z; public double area(); int edges(); 23

abstrakta klasser void print(const Shape &shp) { cout << Edges << shp.edges() << endl; cout << Area << shp.area() << endl; } 24

abstrakta klasser class Shape { public virtual double area() = 0; virtual int edges() = 0; 25

list_char class list_char { public char car; list_char *cdr; list_char(char c, list_char *cd) car(c), cdr(cd) { void print(ostream &os) const { os << car; if( cdr!= NULL) { os << -> ; 26

list_int class list_int { public int car; list_int *cdr; list_int(char c, list_int *cd) car(c), cdr(cd) { void print(ostream &os) const { os << car; if( cdr!= NULL) { os << -> ; 27

template template <typename Type> class List { public Type car; List *cdr; List(Type c, List *cd) car(c), cdr(cd) { void print(ostream &os) const { os << car; if( cdr!= NULL) { os << -> ; 28

template List<int> *ĺi = new List<int>(42, NULL); List<double> *ld = new List<double>(4.2, NULL); 29