Innehåll. Rela+oner mellan klasser Operatoröverlagring. Sta+c- medlemmar. Const- och referensmedlemmar. Const medlemsfunk+oner. friend 2012-12- 05



Relevanta dokument
Innehåll. Relationer mellan klasser Operatoröverlagring. Static-medlemmar. Const- och referensmedlemmar. Const medlemsfunktioner

En ström är en klass som representerar en bytesekvens med data. I C++ finns flera typer av strömmar, men de går alla al använda på samma säl.

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

TDIU01 - Programmering i C++, grundkurs

Övningar Dag 2 En första klass

Introduktion till arv

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

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

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

TDIU01 - Programmering i C++, grundkurs

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

Tentamen i Programmering grundkurs och Programmering 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.

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

Programmering B med Visual C

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

OOP Objekt-orienterad programmering

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

Tentamen i. Programmering i språket C

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

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

5 Arv och dynamisk bindning FIGUR

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

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

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

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

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

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Tentamen i Programmering grundkurs och Programmering C

Programmeringsteknik med C och Matlab

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

TDDC76 - Programmering och Datastrukturer

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

Att använda pekare i. C-kod

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

1 Funktioner och procedurell abstraktion

Typkonvertering. Java versus C

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

(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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

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

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

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

OOP Objekt-orienterad programmering

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

Innehåll. Pekare Exempel

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

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

Programsystemkonstruktion med C++

Innehåll. Pekare Syntax

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Föreläsning 7 Strängar

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

TDIU01 - Programmering i C++, grundkurs

F3 Klasser och objekt. ID1004 Objektorienterad programmering Fredrik Kilander

TDIU01 Programmering i C++

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

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

SMD 134 Objektorienterad programmering

Innehåll. Pekare Exempel

TDDC76 Programmering och datastrukturer

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

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Objektorienterad Programmering (TDDC77)

TDDC76 - Programmering och Datastrukturer

Dynamisk bindning och polymorfism

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

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

Objektorienterad programmering i Java

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Skizz till en enkel databas

OrganisaKon / Struktur / Ansvar!

Objektorienterad Programmering (TDDC77)

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

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

DAT043 - Föreläsning 7

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Tillämpad programmering

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Grundläggande programmering med C# 7,5 högskolepoäng

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

Föreläsning 4: Poster

Programmering A. Johan Eliasson

Transkript:

Innehåll Rela+oner mellan klasser Operatoröverlagring Och lite diverse Repe++on och frågor om +digare delar Mer om klasser: const, referens, sta+c, friend, explicit Mer om klasser: arv (är), composi+on (vital del av), aggrega+on (umbärlig del av), associa+on (känner +ll) Mer om klasser: operatorer Funk+onsobjekt C- bibliotek: cstdlib, cmath, cctype, c+me Mer om STL: random, regex, string C- strängar, C- arrayer (inbyggda arrayer), (Pekare) Kommandoradsargument Enkla templates Const- och referensmedlemmar Referenser och konstanter är speciella. Varför? De måste ini+eras direkt vid deklara+on, och dewa går inte ändra senare. Hur fungerar dewa om referensen eller constanten är medlem av en klass? Ini+eringslista måste användas Rita Förklara Sta+c- medlemmar Normalt får varje instans av klassen en egen kopia av alla medlemsvariabler. Normalt skickas en pekare (this) +ll instansen med när en medlemsfunk+on anropas. En medlemsvariabel eller medlemsfunk+on kan vara sta+c. Medlemsvariabeln är då gemensam för alla instanser. Finns aldrig mer än en. Medlemsfunk+onen får inte en referens +ll instansen vid anrop. Kan då inte använda några icka- sta+ska medlemmar. Kan å andra sidan användas utan aw ha någon instansvariabel. Const medlemsfunk+oner Lovar dyrt och heligt aw de inte ändrar på någon medlemsvariabel. Kan därmed anropas på instansvariabler som är konstanta. Kompilatorn kontrollerar dewa NOGA Vanligt och jobbigt fel aw const är det enda som skiljer för aw det skall fungera. Ta för vana aw all+d skriva const när det går. Lös problem med const genom aw: Göra medlemsfunk+oner +ll const Använda const_iterator Göra parametrar +ll const& Ta inte bort const för aw få det aw fungera även om det är frestande. Det är bara en +llfällig lösning medan du väntar på hjälp friend class Boy { public: friend void dofunnystufftogether(boy b, Girl g); // Need to be friend of Boy? private: Boystuff private_part; }; class Girl { public: friend void dofunnystufftogether(boy b, Girl g); // Need to be friend of Girl? private: Girlstuff private_part; }; void dofunnystufftogether(boy b, Girl g) { // Är inte en medlemsfunktion av någon klass, så för att // få tillgång till privata delar av en klass måste den // klassen ha med en friend-deklaration som ovan. } 1

explicit class Gay { public: Gay(Boy); // make explicit?? void dofunnystufftogether(gay a); }; int main() { Boy hetero, bi; Gay gay(bi); gay.dofunnystufftogether(hetero); //?? } Rela+oner mellan klasser Arv (Inheritance) Rela+onen ÄR. En kaw ÄR ew djur. Composi+on Rela+onen VITAL DEL AV. SkeleW är en vital DEL AV en ko. Tas skelewet bort är det inte en ko längre. Men kanske en blodig biff? Aggrega+on Rela+onen UMBÄRLIG DEL AV. Fingrar är en umärlig DEL AV en människa. Tas (några) fingrar bort är det fordarande en människa. Kanske funk+onshindrad, men människa. Associa+on Rela+onen KÄNNER TILL. En människa känner +ll kreditkort och kan (kanske) använda det. Någon som minns? Programming in the language versus programming into the language Anpassa inte dina tankar +ll språket. Utryck dina tankar med hjälp språket Koden skall vara en spegling av hur du tänkt. Hur hjälper C++ +ll? bool dangerous(); protected: bool m_hungry; private: bool m_petable; }; Arv class Animal class Cat : public Animal { { public: public: Cat() : Animal(true) {} Animal(bool petable) }; : m_petable(petable) {} class Lion : public Animal { public: Lion() : Animal(false) {} }; class Circus_Lion...? Terminologi class Cat : public Animal {...}; Animal är basklass. Cat är en klass härledd från basklassen Animal. Cat är en subklass +ll Animal. Animal är superklass +ll Cat. Public, protected, private Publikt arv (class Cat : public Animal) medlemmar behåller samma åtkomst. Skyddat arv (class Cat : protected Animal) publika medlemmar från basklassen blir skyddade i härledda klassen Privat arv (class Cat : private Animal) medlemmar från basklassen blir privata i subklassen basklassen blir oåtkomlig, composi+on bäwre? Privata medlemmer från basklassen är all+d oåtkomliga i den härledda klassen 2

Composi+on and Aggrega+on class Cow { public: Cow(); private: Skeleton m_skel; // Composition Nipple m_nip[4]; // Aggregation }; Associa+oner int main() { Boy bertram; Wife hilma(bertram); // hilma (Wife) känner till bertram (Boy) cout << bertram.mode() << endl; // deprimerad Girl asta; bertram.dofunnystufftogether(asta); // bertram (Boy) känner till asta (Girl) cout << bertram.mode() << endl; // glad cout << hilma.mode() << endl; // arg och ledsen Credid_Card visa(bertram); // Ett kreditkort ägs av någon... Store hm; asta.workatstore(hm); // Girl känner till Store hilma.goshopping(hm, visa); // Wife känner till Store och Credit_Card cout << hilma.mode() << endl; // skadeglad cout << asta.mode() << endl; // arg och ledsen cout << bertram.mode() << endl; // deprimerad } Operatorsökning Vad händer om vi försöker addera två variabler av klasstyp? Girl hilda; Boy bertram;?? = hilda + bertram; // Fall 1???? = bertram + hilda; // Fall 2?? Det blir kompileringsfel i fall 1 ejer sökning av: Girl::operator+(Boy) operator+(girl, Boy) Det blir kompileringsfel i fall 2 ejer sökning av: Boy::operator+(Girl) operator+(boy, Girl) Operatoröverlagring Vad händer om vi skriver någon av sökta funk+oner? Couple operator+(girl g, Boy b) { return Couple(g, b); } hilda + bertram går nu aw skriva Lämplig operator+() anropas Resultatet bestäms av returvärdet från operator+ Medlem eller fri? Antag aw a och b är av klasstyp A och B. Om operatorfunk+onen är medlem i A gäller för a + b: anropet a.operator+(b) a nås via nyckelodet this b nås via första parmeter Om operatorfunk+onen är en fri funk+on (inte medlem i någon klass) gäller för a + b: anropet operator+(a,b) a nås via första parameter b nås via andra parameter Om operatorfunk+onen är medlem i B kan a + b inte udöras då vänstersidan av operatorn då måste vara av typ B för aw operatorfunk+onen skall hiwas. Operatorfunk+oner Några tänkbara operatorfunk+oner för klass A. B, C, D representerar någon annan datatyp. A A::operator+(A const&) A A::operator+(B const&) A operator+(b const&, A const&) ostream& operator(ostream&, A const&) istream& operator(istream&, A&) bool operator<(a const&) bool operator==(a const&) C& operator[](int) D operator()(???) 3

Funk+onsobjekt Diskutera exempel: Summera 10 heltal. Lös på olika säw Använda C- funk+oner C- biblioteket har många delar som fordarande är användbart i C++. En given inkluderingsfil <header.h> inkluderas i C++ genom aw skriva <cheader> istället: <cstdlib> isd <stdlib.h> <cctype> isd <ctype.h> <cmath> isd <math.h> <c+me> isd <+me.h> <cstdlib> struct div_t { int quot; int rem; }; struct div(int numer, int denom); int abs(int value); int rand(); void srand(unsigned int seed); void exit(int status); int tolower(int) int toupper(int) int isalpha(int) int isalnum(int) int isblank(int) int iscntrl(int) int isdigit(int) int isgraph(int) int islower(int) int isprint(int) int ispunct(int) int isspace(int) int isupper(int) int isxdigit(int) <cctype> <cmath> #define M_PI 3.1415... double sin(double) double cos(double) double pow(double) double sqrt(double) double exp(double) double floor(double) double ceil(double) double floor(double) double round(double) <c+me> // Sek. sedan kl 00:00 1970-01-01 time_t time(nullptr) // Ticks sedan programstart clock_t clock() #define CLOCKS_PER_SEC... 4

chrono: Tid i C++11 ra+o: Bråk i C++11 <chrono>, <ra+o> size_t size_t string& string& char char* char string& string string <string> size() length() insert(index, tecken/sträng) erase(index, [antal]) at(index) c_str() operator[index] operator+=(tecken/sträng) operator+(tecken/sträng) substr(index, antal) <random> <boost/regex.hpp> Skapa motor: default_random_engine def(seed); mt19937 mt(seed); random_device rnd; Skapa distribu+on: uniform_int_distribution<int> uni(start, stop); normal_distribution norm(mean, stddev); Slumpa: uni(rnd); // slumpar mellan start och stop från rnd norm(def); // slumpar normafördelat från def-motorn sudo apt- get install libboost- all- dev boost::regex(pawern) boost::regex_match(subject, pawern) boost::regex_search(subject, result, pawern) boost::regex_replace(subject, pawern, replace) srand(), rand() i C-biblioteket int array[5] = {1, 2, 3, 4, 5}; C- sträng, C- array const char* cstring = Kalle ; // vanligen char const* cstring = Kalle ; // jag? // egentligen: const char data[] = { K, a, l, l, e, \0 }; const char* cstring = data; // Rita Förklara // Storlek? Lagras inte någonstans (om inte du gör det) Kommandoradsargument int main(int argc, char* argv[]) { vector<string> arg(argv, argv+argc); for (unsigned i = 0; i < arg.size(); ++i) { cout << arg[i] << endl; } return 0; } 5

Templates En mall för hur något skall udöras Vad det udörs på (datatyp) anges först vid användning Tills dess används platshållare Mallen kan ställa krav på vilka opera+oner datatypen måste klara av Template: exempel template<typename PLATSHÅLLARE> void swap(platshållare a, PLATSHÅLLARE b) { PLATSHÅLLARE save = a; // kopiering a = b; // tilldelning b = save; } // swap() ställer kraven att datatypen // PLATSHÅLLARE kan kopieras och tilldelas Template: användning int main() { int a, b; float c, d; double e, f; swap(a, b); swap(c, d); swap(e, f); swap(a, f); //? } Template: kompilering Templatekod kan inte kompileras Platshållaren är okänd Kan bara kompileras ejer aw platshållaren bestämts Undantag +ll reglerna om headerfiler och implementa+onsfiler Templateimplementa+onsfilen kompileras inte, den inkluderas sist i templateheaderfilen 6