Presentation laddar. Vänta.

Presentation laddar. Vänta.

Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.

Liknande presentationer


En presentation över ämnet: "Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar."— Presentationens avskrift:

1 Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar */ och // Kommentar  const int bufsiz = 512 (”inte #define”)  {Block}, block-scope, initiering  Deklarera före användning – i minsta möjliga scope

2 Sid 2 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Datatyper  (signed/unsigned) char short int long, float double - som i C  bool  klasser i C++ standard library (exempel!)  även fördefinierade klassmallar  klasser man definierar själv eller köper En klass är en datatyp! (Nytt - Stroustrup 4.2) (Repetera C:s, Stroustrup 4)

3 Sid 3 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Operatorer, nyckelord + - * / % (remainder) = > && || ! = ++ -- += -= etc. ? : sizeof, ::. -> [] () new delete & | ~ ^ > &= |= ^= Reserverade nyckelord se tabell i boken s.924 (Repetera C:s, Stroustrup 6.2 t.o.m. 6.2.5)

4 Sid 4 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Implicit typkonvertering  aritmetiskt uttryck innehållande olika typer: till den typ som är störst (har flest databitar)  tilldelning av uttryck av en typ till objekt av annan typ.  uttryck av en typ används som parameter till funktion vars formella parameter har annan typ.  funktions returvärde tilldelas uttryck av annan typ än den som definierats för det. (Som i C)

5 Sid 5 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Explicit typkonvertering variabel = static_cast (uttryck) På samma sätt: dynamic_cast const_cast reinterpret_cast Använd inte C- skrivsättet: önskadtyp(uttryck) eller (önskadtyp)uttryck (Stroustrup 6.2.7) (Mer om dynamic_cast senare)

6 Sid 6 2000-period2CD5250 OOP med C++ Mats Medin 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 (Stroustrup 3.3, 8.1-8.2)

7 Sid 7 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT iostream library #include int mittTal; cout << ”Gissa ett heltal” << endl; cin >> mittTal; cerr << ”Det var fel!” << endl; (Stroustrup 3.2, 3.4, 3.6)

8 Sid 8 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT I/O mot filer #include // iostream på köpet string filnamn; cout << ”Vilken fil ska öppnas?: ” << endl; cin >> filnamn; ifstream infile(filnamn); if (!infile) cerr << filnamn << ” gick inte att öppna ” << endl; (Stroustrup 21.5 t.o.m. 21.5.2)

9 Sid 9 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Klassen string // Smartare än char * ! #include string myString(“Vi testar string”); const string tomStr; if ( ! yourString.size()) if (yourString.empty()) if (myString == yourString) cin >> myString (Stroustrup 3.5) (20 för den som vill läsa mer)

10 Sid 10 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Referenser ”Som pekare men lättare att använda.” Används mest för parameteröverföring. int mittTal = 3; // lyckotal? int &refTillMittTal = mittTal; /* jfr */ int *pTillMittTal = &mittTal; refTillMittTal += 4; // vad händer? refTillMittTal = ettAnnatTal; // vad händer? (Stroustrup 5.5)

11 Sid 11 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT dynamisk minnesallokering pekare, new och delete int * heltalsP = new int(13); int *heltalsP2 = new int[10]; delete heltalsP; delete[] heltalsP2; int* p eller int *p??? void * p Använd 0 (inte NULL) (Stroustrup 5.1, 5.6)

12 Sid 12 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Mer pekare minTyp* pMinTyp = new minTyp[bufstorl]; pMinTyp++; pekare till funktion (Stroustrup 5.3)

13 Sid 13 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Faror med pekare Om i något läge avallokering missas –“minnesläcka” Pekare till objekt som inte finns längre Delete av samma objekt 2 ggr via olika pekare objA objB !

14 Sid 14 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT // Smartare än array #include vector minHeltalsVektor(100); // Nu använder vi en klassmall dinVektor = minVektor; if (dinVektor.empty()) while (cin >> word) minVektor.push_back(word); (Stroustrup 3.7.1) (3.7.2 för den som vill läsa mer)

15 Sid 15 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktioner i C++ Som i C men fler valmöjligheter beträffande parameteröverföringen: void move(int steps); // lokal kopia på stacken void send(char *buffer); void swap(int &v1, int &v2); bool isEqual(const int& v1, const int& v2); void send(char * buffer, protocol p = defaultProtocol); void send(char *buffer,...); // suspend typechecking (Stroustrup 7.1-7.3, 7.5-7.6, 7.9)

16 Sid 16 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Lurigt? int evaluate(HugeObj &hObj); myValue = evaluate(myHugeObj); int evaluate(HugeObj *hObj); myValue = evaluate(&myHugeObj);

17 Sid 17 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av funktioner void print(int x); void print(float f); int add(int x, int y); float add(float x, float y); print(add(int1, int2)); print(add(float1, float2)); Jämför: printInt(addInt(int1, int2)); printFloat(addFloat ( float1, float2 )); printChar, printBool, printString, (Stroustrup 7.4)

18 Sid 18 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Lurigt? void move(graph& g, int x, int y); void move(graph& g, 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? scope

19 Sid 19 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT inline inline void move(graph& g, int x, int y) { /* kod som ska kommas åt snabbt */ } (inga fula makron här inte) (Stroustrup 7.1.1) (7.8 till exklusive 7.8.1 För den som vill läsa mer)

20 Sid 20 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmallar template <class MyFirstType, typename MySecondType, int size> MyFirstType compute(MySecondType x) { MyFirstType y;... if (x...)...y =... return y; } float myStartValue = 3.141592; int result = compute(myStartValue ); // instantiering (Stroustrup 13.3) (mer om mallar senare)

21 Sid 21 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Lurigt Funkar mallen för alla typer som kan komma att användas med den? Kan typerna/värdena bestämmas då mallen används?


Ladda ner ppt "Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar."

Liknande presentationer


Google-annonser