Presentation laddar. Vänta.

Presentation laddar. Vänta.

Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner.

Liknande presentationer


En presentation över ämnet: "Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner."— Presentationens avskrift:

1 Föreläsning 3

2 Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner och datamedlemmar };

3 Tillgänglighet (kap. 7.1) Utanför klassen kommer man bara åt synliga medlemmar (public) Utifrån används punkt eller pil för åtkomst av medlemmar (public) –Objektnamn.medlemsnamn –Pekare_till_objekt->medlemsnamn Inne i en medlemsfunktion kan man komma åt alla medlemmar utan punktnotation

4 Medlemsfunktioner (kap. 7.2) Bör definieras separat, utanför klassdefinitionen (i cpp-filen) –resultattyp klassnamn::funktionsnamn(parametrar) Kan även definieras i klassen om funktionen är väldigt kort (motsvarar inline)

5 h-filen #ifndef KLASSNAMN_H #define KLASSNAMN_H class Klassnamn { Klassnamn(); // Defaultkonstruktor Klassnamn(int p, int q); void Funktionsnamn(int p); }; #endif // KLASSNAMN_H

6 cpp-filen #include ”Klassnamn.h” Klassnamn::Klassnamn() { } Klassnamn::Klassnamn(int p, int q) {... } void Klassnamn::Funktionsnamn(int p) {... }

7 Initieringslistor (kap. 7.3.2) Hur skall medlemsobjekt vars konstruktor tar argument initieras? –Exempel: Size Initieringslistan har formen: –: d1(uttryck), d2(uttryck)... Klassnamn::Klassnamn(int width, int height) : m_size(width,height) {... }

8 Initieringslistor forts. Referenser kan bara initieras när de deklareras Hur skall referenser i klasser initieras? Member initializer list i konstruktorn Klassnamn::Klassnamn(Objekt & o) : m_referens(o) {... }

9 Övningar, exempel Konstruera en klass Person. En person skall bestå av: –Namn –Adress –Ålder –Föräldrar (Personer) Gör lämpliga metoder och konstruktorer

10 this-pekaren (kap. 8.2) I alla metoder finns en pekare som heter ”this” ”this” pekar ut det objekt som metoden arbetar på Via this-pekaren kommer man åt datamedlemmar

11 this forts. void Size::SetX(int x) { m_x = x; } void Size::SetX(int x) { this->m_x = x; } Dessa två metoder är ekvivalenta –Kompilatorn ”förstår” oftast när this-pekaren skall användas, därför behöver man oftast inte använda this-pekaren.

12 this forts. Metoder kan returnera this-objektet Kan användas för att länka ihop metodanrop Klass & Klass::metodnamn(parametrar) {... return *this; } Klass objekt; objekt.metod1(...).metod2(...).metod3(...);

13 Vänner (kap. 8.3) Tillåter viss extern åtkomst av protected och private medlemmar Bryter mot objektorienteringen Undvik så mycket som möjligt Dock nödvändig i vissa fall

14 Vänner forts. Vänner kan vara –Klasser –Funktioner Class C { friend returtyp funktion(parametrar); friend class C2;... };

15 Operatoröverlagring (kap. 8.4) Funktioner eller metoder som anropas genom aritmetiska tecken istället för metodnamn –Namn börjar med operatorX –X ersätts med +, -, =, !=, >, >, << m.fl. Kan snygga upp programkoden Ökar dock inte språkets uttrycksmöjligheter Syntaktiskt socker

16 Tilldelningsoperatorn Size & Size::operator=(Size const & s) { if(&s != this) { m_width = s.m_width; m_height = s.m_height; } return *this; } Size s1; Size s2; s1 = s2; // Tilldelningsoperatorn används // OBS skillnaden mot tilldelningskonstruktorn // Tilldelningsoperatorn används inte här Size s3 = s1;

17 Tilldelningsop. forts. if(&s != this) –Kopiera aldrig dig själv return *this; –Returnera objektet själv som resultat av tilldelningen

18 Operatorn += Liknar tilldelningsoperatorn i användningsätt Size & Size::operator+=(Size const & s) { m_width += s.m_width; m_height += s.m_height; return *this; } Size s1(10,5); Size s2(2,2); s1 += s2; // += operatorn används // s1 skall nu vara (12,7)

19 Operatorer Kan ha en operand (unära) eller två operander (binära) Operatorerna har samma prioritet som motsvarande fördefinierade operatorer Kan konstrueras som medlemsfunktioner eller vänfunktioner

20 Binära operatorer Har två operander –Den vänstra är objektet själv (this) –Den högra fås som första parameter Tar en parameter då det är en medlemsfunktion, två för vänfunktioner Exempel: ==, !=, +=, -=, +, -

21 Exempel (binär operator) Size s(10,10); Size t(5,5); Size u = s+t; // s+t skapar ett temporärt objekt // s är första operand, t andra // Detta är därför fullt möjligt int w = (s+t).Width(); // ger w = 15 Size Size::operator+(Size const & s) const { // this är första operand, s andra Size temp = *this; temp += s; // använd += operatorn return temp; // returnera temporärt objekt }

22 Unära operatorer Har en operand Tar oftast inga parametrar Exempel: ++, --, - Size Size::operator-() const { Size temp; temp.m_width = -m_width; temp.m_height = -m_height; return temp; }

23 Indexeringsoperatorn operator[] Används för indexering i t.ex. std::vector Standardbeteende är att lämna tillbaks en referens till ett element, så kan man både läsa och skriva till det indexerade elementet

24 Indexeringsoperatorn forts. Skapa också en ”const”-variant av de metoder som returnerar referenser till objekt int & Vektor::operator[](int index) {... return element; } int Vektor::operator[](int index) const {... return element; }

25 Övriga operatorer operator()(...); –Funktionsanropsoperator –Valfritt antal parametrar operator typ() const; –Inga parametrar eller returvärde anges –Omvandlar från den aktuella klassen till typen typ –Anropas automatiskt när typomvandling behövs

26 friend-operatorer Operatorer som inte passar i klasser Måste användas när vänsteroperanden inte tillhör den aktuella klassen Har lika många parametrar som antal operander friend returtyp operatorX(parametrar);

27 friend-operatorer forts. // friend-funktion ostream & operator<<(ostream & o, Size const& s) { o << s.m_width << ”,” << s.m_height; return o; } // Tillägg i Size-klassen friend ostream & operator<<(ostream & o, Size const& s); Size s(10,4); // skriv ut ”s har storleken 10,4.” cout << ”s har storleken ” << s << ”.” << endl;

28 Teknisk beskrivning av metodanrop i C++/C // C++ void Klass::metod() { m_variabel = 5; } /* C */ void Klass_metod(struct Klass * this) { this->m_variabel = 5; } instans.metod(); // Anrop till ”metod” Klass_metod(&instans); // Motsvarande C anrop

29 Objektorienterad analys (kap. 6.1) Analysfasen är till för att bestämma vad som skall göras –Sätt dig in i problemet –Skapa en grov modell av hur systemet skall vara uppbyggt Objekt Attribut Relationer

30 Klassdiagram Enkel beskrivning av klasser –Klassnamn –Dataattribut –Operatorer Person Namn Ålder Föräldrar GetName GetAge SetName …

31 Har-relation Aggregat Grafisk beskrivning av hur objekt är kopplade till varandra (har-relation) Bilen har en motor BilMotor

32 Har-relation forts. Bilen har en motor med flera cylindrar Fylld cirkel = en eller flera Ofylld cirkel = noll eller en MotorCylinder

33 Har-relation forts. Sammansättning av flera delobjekt Bil MotorHjulKaross

34 Känner till-relation Association Känner till objekt men ”äger” dem inte BilPerson ägerägare

35 Känner till-relation Association mellan objekt av samma klass Person make/maka

36 Är-relation Arv och ärvda egenskaper Gemensamma egenskaper med andra klasser Exempel –En bil är ett fordon –Motorcykel är ett fordon

37 Är-relation forts. Fordon Hastighet Vikt Ändra_hastighet Bil Motoreffekt Växla Båt Dödvikt Sväng Tåg Antal_vagnar Koppla_vagn

38 Objektorienterad design Designfasen är till för att bestämma hur saker skall lösas Ingen kristallklar gräns mellan analys och design

39 Systemdesign Beslut om vilka system som skall ingå –Windows / X-Windows –SQL-server –Tredjepartssystem

40 Objektdesign Konkretiserar de objekt som identifierades under analysfasen –Dataattribut –Metoder –Parametrar Algoritmer Programspråk

41 Modelleringsspråk OMT Objectory Booch UML (Unified Modeling Language) –OMT + Objectory –Industristandard –Modelleringshjälpmedel, inte någon metod


Ladda ner ppt "Föreläsning 3. Klasser class namn { public: deklarationer av synliga medlemsfunktioner och datamedlemmar protected: private: deklarationer av gömda medlemsfunktioner."

Liknande presentationer


Google-annonser