Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avMarcus Sundqvist
1
Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta) Iden med klasser
2
Sid 2 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klasser är användardefinierade datatyper En abstraktion av något man använder Logiskt sammanhängande “En struct innehållande funktioner, inte bara data” Stack _stack push pop isEmpty Lampa tänd släck lyser
3
Sid 3 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT En klass “i verkligheten” Är en samling objekt med likadana egenskaper, likadant beteende
4
Sid 4 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT En klass i ett programspråk-C++ är egentligen en “form att gjuta objekt i”. Klassen är en beskrivning av hur objekten kan se ut (attribut/egenskaper-medlemsdata) och bete sej/vad man kan göra med dom (metoder/operationer-medlemsfunktioner) storlek färg vikt hastighet tillstånd innehåll... skapa ta bort måla flytta starta stanna...
5
Sid 5 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Vi väljer vilka egenskaper och vilket beteende vi vill belysa class Car { public : start_engine(); shift_gear(); private : int current_gear; bool engine_runs; } class Car { public : void owner(person & p); bool taxIsPaid (); private : bool taxPaid; person _owner; }
6
Sid 6 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klassen “finns inte” Det är objekten som “finns” Undantag: klassdata och klassfunktioner static Klasserna är verktyg för att göra objekt
7
Sid 7 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Bra med klasser/objekt informationsdöljande (information hiding) – mitt och ditt, kontroll, bemästra komplexitet –lokalitet, lätt hålla ihop Snitt mot omvärlden (interface) Bibliotek, tillverkare och användare –OBS! Klasser och deras interaktion behöver dokumenteras
8
Sid 8 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klassens beståndsdelar member data – jfr (typedef) struct Val av sammansättning (aggregation): “by value” eller “by reference” pekare, utbytbar, kan vara 0 referens, måste kopplas till objekt, kan ej ändras sen metoder (operationer) - member functions
9
Sid 9 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Access specifiers public – snittet mot användaren private – interna hjälprutiner och data som användaren inte ska komma åt Vanligen alla data, en fråga om stil protected – för Arvingarna, mer om det senare
10
Sid 10 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Medlemsåtkomst “klassnivå” :: “objektnivå” i statiskt allokerat objekt. i dynamiskt allokerat objekt, via pekare -> “Forward-deklaration” class MinKlass; // bra till vad?
11
Sid 11 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Implementation av klass och objekt MinKlass görSi görSå data1 data2 class MinKlass { public: void görSi() {...} void görSå() {...} private: int data1,data2; } MinKlass mittobj1, mittobj2; Kod för medlems- funktionerna Data för mittobj1 Data för mittobj2
12
Sid 12 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT inline member functions class MyClass { doThis(xxx) { /* kod i class definition blir automatiskt inline*/ } } MyClass ::doThat { /* inte inline */ } inline MyClass ::foo { /* givetvis inline */ } För att få snabbhet trots många många anrop i OOP
13
Sid 13 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT “Speciella” medlemsfunktioner Konstruktor MinKlass(xxx) destruktor ~MinKlass() operatorer t.ex. bool operator==(const MinKlass&) Gemensamt för alla objekt: Skapa Ta bort Se detta som ett funktions- namn så blir det lättare! Men – OBS - ”operator” skrivs ej då den anropas
14
Sid 14 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning Access till klassmedlem: “Klassnamn::medlemsnamn” måste användas i kod “utanför klassen” “inuti klassen” är inuti klassdefinitionen class xxx { här }; inuti medlemsdefinitionerna xxx::func(ppp) { /* kod */ } gäller även i definition av medlemsdata
15
Sid 15 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning forts Ordningen spelar roll, saker måste deklareras (men ej definieras) innan de används Undantag: namn använda i inline-funktions-kod namn i default-argument
16
Sid 16 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klass-scope och namnupplösning forts En sak med ett visst namn inuti en klass döljer saker med samma namn utanför klassen Man kan komma runt detta med scope- operatorn, exempel: ::objektX pekar ut globalt objektX så man kommer åt det även inuti en klass med ett eget objektX
17
Sid 17 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klass inuti klass (inte klass mot klass...) class List class ListNode ett listobjekt information hiding! Man kan också ha en klass inuti en funktion, “local class”.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.