Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avMattias Blomqvist
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?
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.