80 likes | 325 Views
Objekt, Klass och Instans. Analys av systemet ger mer eller mindre detaljerade objekt Objekten sorteras och klass-diagram ritas upp där relationer reds ut En instans skapas med en klass som mall. Klassrelationer (har, känner till är). En bil har en motor
E N D
Objekt, Klass och Instans • Analys av systemet ger mer eller mindre detaljerade objekt • Objekten sorteras och klass-diagram ritas upp där relationer reds ut • En instans skapas med en klass som mall
Klassrelationer (har, känner till är) En bil har en motor En annan bil har en annan motor, ej samma En spelare känner till en kortlek En annan spelare känner till samma kortlek En bil är ett fordon Ett tåg är också ett fordon
Klassrelationer C++ Har: Instansen av flight skapar en klock instans. Flight.h #include ”klocka.h” Class Flight { Public: Flight(int dep_h,int dep_m) {dep(dep_h,dep_m)}; Private: Klocka dep,arr; } Känner till: Konstruktorn av spelare får in en referens (eller en pekare) till kortleken. Spelare.h #include ”kortbunt.h” Class Spelare { Public: Spelare(Kortbunt& kortbunt) { leken = Kortbunt} int spela(); Private: Kortbunt hand Kortbunt& leken; }
Namespace (1/5) I lab1 ser man using namespe std; Det betyder att man använder sig av konstanter och funktioner som inte ”ses” utanför std namnrymden. Std är namnet för STL (Standard Template Library) Man vill ”gömma” stl för de som inte använder stl.
Namespace (2/5) I funktionen f i filen hej.cpp vill man använda sig av både rectangle och square. Variabel width finns i båda filerna. rectangle.h //deklarationer const int width=30; const int height=10; //mer square.h //deklarationer const int width=50; //mer Hej.cpp #include”rectangle.h” #include ”square.h” void f() { //square calulations int SquareWidth=width; //... } Vilken width ska användas?? -Kompilatorn kan inte sätta ett värde på variablen width.
Namespace (3/5) En lösning är att använda sig av namespaces. rectangle.h Namespace eva { //deklarationer const int width=30; const int height=10; //mer } square.h Namespace kalle { //deklarationer const int width=50; //mer } Hej.cpp #include”rectangle.h” #include ”square.h” void f() { //square calulations int SquareWidth=kalle::width //rectangle calulations int RectWidth=eva::width }
Namespace (4/5) Hej.cpp fungerar också Hej.cpp #include”rectangle.h” #include ”square.h” void f() { using namespace kalle //square calulations int SquareWidth=width //rectangle calulations int RectWidth=eva::width }
Namespace (5/5) Hej2.cpp #include”rectangle.h” #include ”square.h” void f() { using namespace kalle //square calulations int SquareWidth=width using namespace eva //rectangle calulations int RectWidth=width } Hej2.cpp går inte att kompilera. Man kan bara utöka namespaces, inte förändra redan definerat beteende.