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

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

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.

TDIU01 - Programmering i C++, grundkurs

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

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

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

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

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

Tentamen i Programmering grundkurs och Programmering C

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

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

Tentamen i Programmering grundkurs och Programmering C

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

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

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

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

Tentamen i. Programmering i språket 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.

Programmering B med Visual C

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

Introduktion till arv

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

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

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

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

TDIU01 - Programmering i C++, grundkurs

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

Programsystemkonstruktion med C++

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

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

Tentamen i Programmering grundkurs och Programmering C

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

TDDC76 - Programmering och Datastrukturer

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

C++ Objektorientering - Klasser. Eric Elfving

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

1 Namnkontroll (NameControl)

5 Arv och dynamisk bindning FIGUR

OrganisaKon / Struktur / Ansvar!

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TDDC76 - Programmering och Datastrukturer

Innehåll. Pekare Exempel

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

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

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

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

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

Typkonvertering. Java versus C

TDDC76 - Programmering och Datastrukturer

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

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

Innehåll. Pekare Exempel

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

(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

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

DAT043 - Föreläsning 7

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

7 Templates och Exceptions

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

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

TDIU01 - Programmering i C++, grundkurs

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

Övningar Dag 2 En första klass

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

Generiska konstruktioner. Kursbokens kapitel 13

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

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

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

Objektorienterad Programmering (TDDC77)

TDIU01 Programmering i C++

Objekt och klasser - Introduktion

F3 Klasser och objekt. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering

TDDC76 Programmering och datastrukturer

TDIU01 - Programmering i C++, grundkurs

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

Tillämpad programmering

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

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

Dynamisk bindning och polymorfism

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

Innehåll. Pekare Syntax

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

Objektorienterad Programmering (TDDC77)

Tentamen *:85/2I4123 C

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

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

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

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Transkript:

Innehåll Relationer mellan klasser Operatoröverlagring Och lite diverse Repetition och frågor om tidigare delar Mer om klasser: const, referens, static, friend, explicit Mer om klasser: arv (är), composition (vital del av), aggregation (umbärlig del av), association (känner till) Mer om klasser: operatorer Funktionsobjekt!!! C-bibliotek: cstdlib, cmath, cctype, ctime 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 initieras direkt vid deklaration, och detta går inte ändra senare. Hur fungerar detta om referensen eller constanten är medlem av en klass? Initieringslista måste användas! Rita! Förklara! Static-medlemmar Normalt får varje instans av klassen en egen kopia av alla medlemsvariabler. Normalt skickas en pekare (this) till instansen med när en medlemsfunktion anropas. En medlemsvariabel eller medlemsfunktion kan vara static. Medlemsvariabeln är då gemensam för alla instanser. Finns aldrig mer än en. Medlemsfunktionen får inte en referens till instansen vid anrop. Kan då inte använda några icka-statiska medlemmar. Kan å andra sidan användas utan att ha någon instansvariabel. Const medlemsfunktioner Lovar dyrt och heligt att de inte ändrar på någon medlemsvariabel. Kan därmed anropas på instansvariabler som är konstanta. Kompilatorn kontrollerar detta NOGA! Vanligt och jobbigt fel att const är det enda som skiljer för att det skall fungera. Ta för vana att alltid skriva const när det går. Lös problem med const genom att: Göra medlemsfunktioner till const Använda const_iterator Göra parametrar till const& Ta inte bort const för att få det att fungera även om det är frestande. Det är bara en tillfällig lösning medan du väntar på hjälp! Relationer mellan klasser Arv (Inheritance) Relationen ÄR. En katt ÄR ett djur. Composition Relationen VITAL DEL AV. Skelett är en vital DEL AV en ko. Tas skelettet bort är det inte en ko längre. Men kanske en blodig biff? Aggregation Relationen UMBÄRLIG DEL AV. Fingrar är en umärlig DEL AV en människa. Tas (några) fingrar bort är det fortfarande en människa. Kanske funktionshindrad, men människa. Association Relationen KÄNNER TILL. En människa känner till kreditkort och kan (kanske) använda det.

Någon som minns? Arv Programming in the language versus programming into the language Anpassa inte dina tankar till språket. Utryck dina tankar med hjälp språket! Koden skall vara en spegling av hur du tänkt. Hur hjälper C++ till? class Animal Animal(bool petable) : m_petable(petable) bool dangerous(); protected: bool m_hungry; private: bool m_petable; class Cat : public Animal Cat() : Animal(true) class Lion : public Animal 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 till Animal. Animal är superklass till 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, composition bättre? Privata medlemmer från basklassen är alltid oåtkomliga i den härledda klassen Composition and Aggregation class Cow Cow(); private: Skeleton m_skel; // Composition Nipple m_nip[4]; // Aggregation Medlem eller fri? Antag att a och b är av klasstyp A och B. Om operatorfunktionen ä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 operatorfunktionen är en fri funktion (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 operatorfunktionen är medlem i B kan a + b inte utföras då vänstersidan av operatorn då måste vara av typ B för att operatorfunktionen skall hittas.

Operatorfunktioner Några tänkbara operatorfunktioner 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&) Funktionsobjekt Diskutera exempel: Summera 10 heltal. Lös på olika sätt! ostream& operator(ostream&, A const&) istream& operator(istream&, A&) bool operator<(a const&) bool operator==(a const&) C& operator[](int) D operator()(???) Använda C-funktioner C-biblioteket har många delar som fortfarande är användbart i C++. En given inkluderingsfil <header.h> inkluderas i C++ genom att skriva <cheader> istället: <cstdlib> istf <stdlib.h> <cctype> istf <ctype.h> <cmath> istf <math.h> <ctime> istf <time.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)

<ctime> // Sek. sedan kl 00:00 1970-01- 01 time_t time(nullptr) chrono: Tid i C++11 ratio: Bråk i C++11 <chrono>, <ratio> // Ticks sedan programstart clock_t clock() #define CLOCKS_PER_SEC... <string> size_t size() size_t length() string& insert(index, tecken/sträng) string& erase(index, [antal]) char at(index) char* c_str() char operator[index] string& operator+=(tecken/sträng) string operator+(tecken/sträng) string substr(index, antal) <random> Skapa motor: default_random_engine def(seed); mt19937 mt(seed); random_device rnd; Skapa distribution: 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 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;

Templates En mall för hur något skall utföras Vad det utförs på (datatyp) anges först vid användning Tills dess används platshållare Mallen kan ställa krav på vilka operationer 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 efter att platshållaren bestämts Undantag till reglerna om headerfiler och implementationsfiler Templateimplementationsfilen kompileras inte, den inkluderas sist i templateheaderfilen