Presentation laddar. Vänta.

Presentation laddar. Vänta.

Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++

Liknande presentationer


En presentation över ämnet: "Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++"— Presentationens avskrift:

1 Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++

2 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

3 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; }

4 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;} };

5 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

6 Sid 6 CD5250 OOP med C++ Daniel Flemström MDH/IDT pArrayen Lite pekarrepetition int* pArrayen = new int[6]; *pArrayen pArrayen[1] &pArrayen

7 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 !

8 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); }

9 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?

10 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

11 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);

12 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?

13 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); }

14 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); }

15 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; }

16 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

17 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…);... }; }

18 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)

19 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;... }

20 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;... }

21 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

22 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.


Ladda ner ppt "Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++"

Liknande presentationer


Google-annonser