C++ som ett bättre C Sid 1 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin, kv) Föreläsn tisd och torsd 17:15 - max 20:00 Lokal: V260 Labbar tisd eller torsd 19: :00 eller onsd 13: :00 Lokal: Lab9 (V423)
C++ som ett bättre C Sid 2 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Kursinformation –välj period 4 vt 2000 (mmi00/mmi004.html) Föreläsningar - läsanvisningar –Kopior av föreläsnings-OH finns att köpa Laborationer 7 st A - G Projektuppgift Förkunskapskrav: C-kurs (godkänd)
C++ som ett bättre C Sid 3 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Bonuspoäng till tentan 1/2 poäng per labb som är klar och redovisad enligt schema (avrundas nedåt till hela poäng) projektet klart och redovisat före tentan - 1 poäng Totalt kan man samla in 4 poäng. Tentamen har 40 poäng.
C++ som ett bättre C Sid 4 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Kurslitteratur C++ Primer, 3rd edition, av Stanley B. Lippman & Josée Lajoie –“Uppslagsbok” (Index!) –Föreläsningar utgående från den Andra böcker om C++: –C++ Direkt av Jan Skansholm –The C++ Programming Language, 3rd edition av Bjarne Stroustrup
C++ som ett bättre C Sid 5 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Översikt av kursen C++ historik C++ som bättre C - procedurell användning Objektbaserad programmering - klasser+objekt Objektorienterad programmering - klasser+objekt+arv
C++ som ett bättre C Sid 6 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Thomas Larssons OH 1-5
C++ som ett bättre C Sid 7 6/23/2015CD5250 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
C++ som ett bättre C Sid 8 6/23/2015CD5250 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!
C++ som ett bättre C Sid 9 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Operatorer, nyckelord + - * / % (remainder) = > && || ! = = -= etc. ? : sizeof, ::. -> [] () new delete & | ~ ^ > &= |= ^= Reserverade nyckelord se tabell i boken s.84
C++ som ett bättre C Sid 10 6/23/2015CD5250 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.
C++ som ett bättre C Sid 11 6/23/2015CD5250 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 gamla skrivsättet: önskadtyp(uttryck) eller (önskadtyp)uttryck
C++ som ett bättre C Sid 12 6/23/2015CD5250 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
C++ som ett bättre C Sid 13 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT iostream library #include int mittTal; cout << ”Gissa ett heltal” << endl; cin >> mittTal; cerr << ”Det var fel!” << endl;
C++ som ett bättre C Sid 14 6/23/2015CD5250 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;
C++ som ett bättre C Sid 15 6/23/2015CD5250 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
C++ som ett bättre C Sid 16 6/23/2015CD5250 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?
C++ som ett bättre C Sid 17 6/23/2015CD5250 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
C++ som ett bättre C Sid 18 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Mer pekare minTyp* pMinTyp = new minTyp[bufstorl]; pMinTyp++; pekare till funktion
C++ som ett bättre C Sid 19 6/23/2015CD5250 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 !
C++ som ett bättre C Sid 20 6/23/2015CD5250 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);
C++ som ett bättre C Sid 21 6/23/2015CD5250 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
C++ som ett bättre C Sid 22 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Lurigt? int evaluate(HugeObj &hObj); myValue = evaluate(myHugeObj); int evaluate(HugeObj *hObj); myValue = evaluate(&myHugeObj);
C++ som ett bättre C Sid 23 6/23/2015CD5250 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,
C++ som ett bättre C Sid 24 6/23/2015CD5250 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
C++ som ett bättre C Sid 25 6/23/2015CD5250 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)
C++ som ett bättre C Sid 26 6/23/2015CD5250 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 = ; int result = compute(myStartValue ); // instantiering
C++ som ett bättre C Sid 27 6/23/2015CD5250 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?
C++ som ett bättre C Sid 28 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT Labbmiljön Inloggning Lösenord Borland Turbo C++