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

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

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

allokeras på stacken dynamiskt new delete

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

Synlighet. Namespace Scope-operatorn Klasser Vänner

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

Dynamisk bindning och polymorfism

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

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

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

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

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

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

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

Programsystemkonstruktion med C++

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

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

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

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

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDDC76 - Programmering och Datastrukturer

Skapa, kopiera och destruera klassobjekt

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

C++ Objektorientering - Klasser. Eric Elfving

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

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

Introduktion till arv

TDDC76 - Programmering och Datastrukturer

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

TDDC76 - Programmering och Datastrukturer

TDDC76 Programmering och datastrukturer

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

DAT043 - Föreläsning 7

TDDC76 - Programmering och Datastrukturer

Objektorienterad Programmering (TDDC77)

F8: Typkonvertering i C++

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

5 Arv och dynamisk bindning FIGUR

Objektorienterad programmering

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

Tillämpad programmering

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

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

Malmö högskola 2007/2008 Teknik och samhälle

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

TDIU01 Programmering i C++

Innehåll. Pekare Exempel

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

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

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

Inledande programmering med C# (1DV402) Tärningarna ska kastas

TUTORIAL: KLASSER & OBJEKT

Innehåll. Pekare Exempel

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Arv bakgrund (kap. 9)

Kapitel 6 - Undantag

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

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 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 5-6 Innehåll

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

Klasshierarkier - repetition

1 Namnkontroll (NameControl)

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Föreläsning 4 Tillägg till C-syntaxen

Arv. Objektorienterad och komponentbaserad programmering

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

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

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Polymorfi. Objektorienterad och komponentbaserad programmering

OOP Objekt-orienterad programmering

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

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

Exempelvis pekarvariabler blir då lättare korrekt deklarerade och initierade.

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

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

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Classes och Interfaces, Objects och References, Initialization

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

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

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Objektorienterad programmering Föreläsning 5

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Transkript:

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 this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner och data, mutable Klasser Klasser används för att Slide 2 strukturera koden kapsla in data knyta metoder till data skapa återanvändbara komponenter

2D1387, Programsystemkonstruktion med C++ 00/01 2 Medlemmar och åtkomst Alla kommer åt public Slide 3 Endast subklasser kommer åt protected Endast klassen själv kommer åt private Medlemsfunktioner som de nieras i klassdeklarationen är implicit deklarerade som inline Slide 4 /* myfile.h -- headerfil med deklarationer */ class A int i; // i är private // foo är inline int foo(char) return 7; } int bar(); // bar, baz är inline om char baz(); // definitionen anger det protected: double d; inline int A::bar() return 2; } // inline i.h-fil /* myfile.cpp -- källkodsfil med definitioner */ char A::baz() return 'x'; } // ej inline i.cpp-fil

2D1387, Programsystemkonstruktion med C++ 00/01 3 Statiska medlemmar Statiska medlemmar är gemensamma för alla instanser av samma klass. De kan t.ex. användas till att räkna instanser av klassen. Slide 5 class A // i headerfil myfile.h static const int fixed_ = 4711; // statisk medlem static int count_; // statisk medlem int array[fixed_]; // vanlig medlem static int count() return count_;} // statisk funktion // i implementationsfil myfile.cpp const int A::fixed_; // statiska medl. måste definieras int A::count_ = 0; // statisk medlemsinitiering... int i = A::count(); Konstruktorer När ett objekt instansieras anropas dess konstruktor Konstruktorer saknar returtyp En implicit konstruktor tillhandahålls av kompilatorn vid behov Slide 6 Konstruktorer kan överlagras Använd explicit då konstruktorn har ett argument av enkel typ Konstruktor som är protected ger klass som bara kan skapas av subklasser Konstruktor som är private ger möjlighet att förhindra användandet av t.ex. defaultkonstruktorn

2D1387, Programsystemkonstruktion med C++ 00/01 4 Slide 7 // date.h -- headerfil class Date Date(); // privat defaultkonstr. Date(const Date &); // kopieringskonstruktor Date(int y, int m, int d); // ÅÅMMDD explicit Date(int c); // dagar från 1900-01-01... int year, month, date; // date.cpp -- källkodsfil Date::Date(const Date &d) /* kopiering */ } Date::Date(int y, int m, int d) : year(y), month(m), date(d) // initiering av medl. } class A A(int i) : number(i) } int number; // konstruktor Slide 8 class B : public A B(double d, int i) : A(i), value(d) } // initiera basen double value;

2D1387, Programsystemkonstruktion med C++ 00/01 5 Destruktorer Slide 9 När ett objekt förstörs (t.ex. med delete eller då det hamnar utanför räckvidd) anropas dess destruktor Destruktorn i en basklass bör vara deklarerad virtual Slide 10 class String // ligger i string.h -- headerfil String() : str(0) } // defaultkonstruktor String(char *s); // kopierar s ~String(); // destruktor protected: char *str; // string.cpp -- källkodsfil String::String(char *s) : str(0) str = new char[strlen(s) + 1]; // glöm inte '\0' strcpy(str, s); } String::~String() delete [] str; }

2D1387, Programsystemkonstruktion med C++ 00/01 6 this-pekaren I en medlemsfunktion kan man komma åt objektet genom att använda den förde nierade pekaren this. this går inte att tilldela. Slide 11 class MyInt int i; MyInt &increase(int); inline MyInt &MyInt::increase(int j) i += j; return *this; // ger referens till objektetet självt } Arv och aggregation För att återanvända be ntliga objekt nns olika möjligheter: Aggregat (innehållande), har en Arv, är en Olika typer av arv är public, protected och private Slide 12 class Animal String species; // Animal innehåller (har en) sträng class Bear : public Animal // Bear ärver (är en) Animal...

2D1387, Programsystemkonstruktion med C++ 00/01 7 Slide 13 class Vehicle Vehicle(int w) : weight(w) } int weight; class Car : public Vehicle Car(int p, int w) : Vehicle(w), persons(p) } int persons;... Car volvo(5, 1700); int i = volvo.weight; Åtkomst vid arv Klasser som är till hjälp för implementationen bör ärvas protected eller private. Man vill inte ha implementationsdetaljer i sitt gränssnitt. Slide 14 Typ av arv public Åtkomst på data/funktion public protected private public protected private protected protected protected private private private private private

2D1387, Programsystemkonstruktion med C++ 00/01 8 Multipelt arv C++ stöder multipelt arv av godtyckligt antal klasser. Slide 15 class Boat Boat(bool s) : has_sail(s) } bool has_sail; class Amphibian : public Car, public Boat Amphibian(int pers, int wt, bool sail = false) : Car(pers, wt), Boat(sail) } Virtuell basklass För att använda gemensamma data i en delad basklass använder man virtuella basklasser genom nyckelordet virtual. Slide 16 A A A B C B C D D

2D1387, Programsystemkonstruktion med C++ 00/01 9 class A int i; class B : public A class C : public A class D : virtual public B, virtual public C class E : public B, public C Slide 17 D d; d.a::i = 7; d.b::i = 8; d.c::i = 9; // alla ändrar samma data E e; e.a::i = 7; e.b::i = 8; e.c::i = 9; // fel: tvetydigt // ok: ändrar i // ändrar inte samma som ovan Konstanta funktioner och variabler Deklarationer med const ger skrivskydd. Slide 18 class A const int ci; const int *p_ci; int *const cp_i; const int *const cp_ci; // ci är skrivskyddad (ssk) // pekare till ssk int // ssk pekare till int // ssk pekare till ssk int int get() const; // objektet är ssk i get int i; // källkodsfil int A::get() const return i; } // ok: förändrar inte int A::get() const return i = 2; } // fel: förändrar obj.

2D1387, Programsystemkonstruktion med C++ 00/01 10 mutable ändrar i objekt som är const Funktioner deklarerade med const gör objektet read-only. Med mutable inför man ett undantag. Slide 19 class A int get() const; // objektet är read-only i get int i; mutable int access_count; inline int A::get() const access_count++; return i; } // ok: får ändras trots const