1 / 22

CD5250

CD5250. OOP med C++. 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 <iostream> och <fstream> String och vector. Kommentar och Scope.

yoshe
Download Presentation

CD5250

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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<iostream> och <fstream> • String och vector CD5250 OOP med C++ Daniel Flemström MDH/IDT

  3. 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 constint BUFSIZE=12;{ ... ... int a,b,c; a = b + c; } CD5250 OOP med C++ Daniel Flemström MDH/IDT

  4. Datatyper, true,false • Nya datatyper. C C++ bool b = true; class kalle {int age; void SetAge(int val) {age = val;} }; #define TRUE –1 #define FALSE 0struct kalle { int age; };void SetAge(int val, struct kalle* s,){s->age = val;} CD5250 OOP med C++ Daniel Flemström MDH/IDT

  5. Minneshantering • C++ har en uppsnyggad minneshantering C C++ enstaka element arrayer malloc / free malloc / free new / delete new[] / delete[] int* i = newint[200]; delete[] i; CD5250 OOP med C++ Daniel Flemström MDH/IDT

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

  7. Faror med pekare ! objA objB • 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 CD5250 OOP med C++ Daniel Flemström MDH/IDT

  8. 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);} CD5250 OOP med C++ Daniel Flemström MDH/IDT

  9. 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? CD5250 OOP med C++ Daniel Flemström MDH/IDT

  10. Annat sätt att se referenser 0x0FA a,b = 7 0x0FB C =0x0FA 0x0FC 0x0FD inta = 7; int& b = a; int* c = &a; int d = *c; // Men vad blir detta??? CD5250 OOP med C++ Daniel Flemström MDH/IDT

  11. Overloading • C++ har funktionslagring (overloading) C C++ void print(int a); void print(float a); void print(char* a); void printInt(int a); void printFloat(float a); void printString(char* a); CD5250 OOP med C++ Daniel Flemström MDH/IDT

  12. Overloading, exempel void move(int x, int y); void move(int angle, int length); typedefint angle;//Hjälper det? classAngle; // - “ - Vad händer? Det räcker inte att returvärdets typ eller parametrarnas namn skiljer CD5250 OOP med C++ Daniel Flemström MDH/IDT

  13. Default arguments • C++ kan ha defaulta värden på argument C C++ void print(int a, char sep = ’b’); void main() { print (12,’b’); print (12);} void print(int a, char sep); void main() { print (12,’b’); print (12);} CD5250 OOP med C++ Daniel Flemström MDH/IDT

  14. Templates • C++ har templates (mallar med typkontroll) C C++ template<typename T> void myRESET(T& a) {a = 0;} void main () { int o = 12; myRESET<int>(o); float f = 12.3; myRESET<float>(f); } #define myRESET(a)\ a = 0 void main () { int o = 12; myRESET(o); float f = 12.3; myRESET(f); } CD5250 OOP med C++ Daniel Flemström MDH/IDT

  15. Inline • C++ har inline funktioner • C C++ inline int MAX(int a,int b) { if (a > b) return a; else return b; } #define MAX(a,b)\ ((a)>(b))?(a):(b) CD5250 OOP med C++ Daniel Flemström MDH/IDT

  16. Namespaces namespace my_namespace { class dog { osv } } my_namespace::dog usingnamespace my_namespace; dog namespace my_ns my_namespace; diskontinuerligt nästade CD5250 OOP med C++ Daniel Flemström MDH/IDT

  17. 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…); ... };} CD5250 OOP med C++ Daniel Flemström MDH/IDT

  18. 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) CD5250 OOP med C++ Daniel Flemström MDH/IDT

  19. iostream library #include <iostream> using namespace std; void main () { int mittTal; cout << ”Gissa ett heltal” << endl; cin >> mittTal; . . . cerr << ”Nåt gick snett!” << endl; . . . } CD5250 OOP med C++ Daniel Flemström MDH/IDT

  20. iostream library II #include <iostream> #include <string> using namespace std; void main () { stringmittNamn; cout << ”Skriv ett namn” << endl; cin >> mittNamn; . . . } CD5250 OOP med C++ Daniel Flemström MDH/IDT

  21. I/O mot filer #include <fstream> usingnamespace std; void main () { ofstream outFile(”Kalle.TXT”); if (outFile){ outFile << ”text” << endl; } }// end main CD5250 OOP med C++ Daniel Flemström MDH/IDT

  22. Enkel felhantering - assert() #include <cassert> using namespace std; inline void checkRange(int index) { assert (index >= 0 && index < size); } ouppfyllt villkor skrivs ut och programmet avlsutas omedelbart. CD5250 OOP med C++ Daniel Flemström MDH/IDT

More Related