Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Sid 2 CD5250 OOP med C++ Daniel Flemström MDH/IDT Lektionsmål Efter avslutad föreläsning bör vi begripa hur man använder: Minnesallokering Defaulta värden på argument Funktionsöverlagring Mallar (Templates) Namespaces C++ Standardbibliotek och String och vector
Sid 3 CD5250 OOP med C++ Daniel Flemström MDH/IDT Kommentar och Scope Kan allt som C kan, och mer därtill. C C++ /* Kommentar*/ #define BUFSIZE 12 { int a,b,c; a = b + c; } // Kommentar const int BUFSIZE=12; { int a,b,c; a = b + c; }
Sid 4 CD5250 OOP med C++ Daniel Flemström MDH/IDT Datatyper, true,false Nya datatyper. C C++ #define TRUE –1 #define FALSE 0 struct kalle { int age; }; void SetAge(int val, struct kalle* s,) {s->age = val;} bool b = true; class kalle { int age; void SetAge(int val) {age = val;} };
Sid 5 CD5250 OOP med C++ Daniel Flemström MDH/IDT Minneshantering C++ har en uppsnyggad minneshantering C C++ enstaka element arrayer new / delete new[] / delete[] int* i = new int[200]; delete[] i; malloc / free
Sid 6 CD5250 OOP med C++ Daniel Flemström MDH/IDT pArrayen Lite pekarrepetition int* pArrayen = new int[6]; *pArrayen pArrayen[1] &pArrayen
Sid 7 CD5250 OOP med C++ Daniel Flemström MDH/IDT Faror med pekare Om i något läge avallokering missas –“minnesläcka” Pekare till objekt(tex array) som inte finns längre Delete av samma objekt två ggr via olika pekare objA objB !
Sid 8 CD5250 OOP med C++ Daniel Flemström MDH/IDT Referenser C++ har pekare men dessutom referenser C C++ void reset(int* a) { *a = 0; } void main () { int b = 12; reset(&b); } void reset(int& a) { a = 0; } void main () { int b = 12; reset(b); }
Sid 9 CD5250 OOP med C++ Daniel Flemström MDH/IDT Mer Om Referenser ”Som pekare men lättare att använda.” Används mest för parameteröverföring. int mittTal = 3; int &refTillMittTal = mittTal; /* jämför med nedan:*/ int *pTillMittTal = &mittTal; refTillMittTal = 4; // vad händer?
Sid 10 CD5250 OOP med C++ Daniel Flemström MDH/IDT 0x0FA 0x0FB 0x0FC 0x0FD Annat sätt att se referenser int a = 7; int& b = a; int* c = &a; int d = *c; // Men vad blir detta??? a,b = 7 C =0x0FA
Sid 11 CD5250 OOP med C++ Daniel Flemström MDH/IDT Overloading C++ har funktionslagring (overloading) C C++ void printInt(int a); void printFloat(float a); void printString(char* a); void print(int a); void print(float a); void print(char* a);
Sid 12 CD5250 OOP med C++ Daniel Flemström MDH/IDT Overloading, exempel void move(int x, int y); void move(int angle, int length); typedef int angle; //Hjälper det? class Angle ; // - “ - Det räcker inte att returvärdets typ eller parametrarnas namn skiljer Vad händer?
Sid 13 CD5250 OOP med C++ Daniel Flemström MDH/IDT Default arguments C++ kan ha defaulta värden på argument C C++ void print(int a, char sep); void main() { print (12,’b’); print (12); } void print(int a, char sep = ’b’); void main() { print (12,’b’); print (12); }
Sid 14 CD5250 OOP med C++ Daniel Flemström MDH/IDT Templates C++ har templates (mallar med typkontroll) C C++ #define myRESET(a)\ a = 0 void main () { int o = 12; myRESET(o); float f = 12.3; myRESET(f); } template void myRESET(T& a) {a = 0;} void main () { int o = 12; myRESET (o); float f = 12.3; myRESET (f); }
Sid 15 CD5250 OOP med C++ Daniel Flemström MDH/IDT Inline C++ har inline funktioner C C++ #define MAX(a,b)\ ((a)>(b))?(a):(b) inline int MAX(int a, int b) { if (a > b) return a; else return b; }
Sid 16 CD5250 OOP med C++ Daniel Flemström MDH/IDT Namespaces namespace my_namespace { class dog { osv } } my_namespace::dog using namespace my_namespace; dog namespace my_ns my_namespace; diskontinuerligt nästade
Sid 17 CD5250 OOP med C++ Daniel Flemström MDH/IDT Egna Namespaces För att skapa ett eget namespace att lägga klasser i använder man nyckelordet namespace –Standardutseende namespace jms { class Matrix { returtyp metod(parametrar…);... }; }
Sid 18 CD5250 OOP med C++ Daniel Flemström MDH/IDT Egna Namespaces 3 olika sätt att komma åt klassen Matrix –jms::Matrix matrix; Använder uttryckligen en klass i ett specifikt namespace –using namespace jms; Matrix matrix; Använder hela jms namespace (risk för kollisioner) –using jms::Matrix; Matrix matrix; Använder endast en delmängd av jms namespace (Matrix)
Sid 19 CD5250 OOP med C++ Daniel Flemström MDH/IDT iostream library #include using namespace std; void main () { int mittTal; cout << ”Gissa ett heltal” << endl; cin >> mittTal;... cerr << ”Nåt gick snett!” << endl;... }
Sid 20 CD5250 OOP med C++ Daniel Flemström MDH/IDT iostream library II #include using namespace std; void main () { string mittNamn; cout << ”Skriv ett namn” << endl; cin >> mittNamn;... }
Sid 21 CD5250 OOP med C++ Daniel Flemström MDH/IDT I/O mot filer #include using namespace std; void main () { ofstream outFile(”Kalle.TXT”); if (outFile) { outFile << ”text” << endl; } }// end main
Sid 22 CD5250 OOP med C++ Daniel Flemström MDH/IDT Enkel felhantering - assert() #include using namespace std; inline void checkRange(int index) { assert (index >= 0 && index < size); } #include using namespace std; inline void checkRange(int index) { assert (index >= 0 && index < size); } ouppfyllt villkor skrivs ut och programmet avlsutas omedelbart.