280 likes | 463 Views
C++ kurs CD5250, vårterminen 2000. Lärare: Mats Medin, mmi@idt.mdh.se (mats.medin@se.abb.com, 0224-20592 kv) Föreläsn tisd och torsd 17:15 - max 20:00 Lokal: V260 Labbar tisd eller torsd 19:15 - 22:00 eller onsd 13:15 - 17:00 Lokal: Lab9 (V423) . Kursinformation.
E N D
C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin, mmi@idt.mdh.se (mats.medin@se.abb.com, 0224-20592 kv) Föreläsn tisd och torsd 17:15 - max 20:00 Lokal: V260 Labbar tisd eller torsd 19:15 - 22:00 eller onsd 13:15 - 17:00 Lokal: Lab9 (V423) CD5250 OOP med C++ Mats Medin MDH/IDT
Kursinformation • http://www.idt.mdh.se/kurser/cd5250 • 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) CD5250 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. CD5250 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 CD5250 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 CD5250 OOP med C++ Mats Medin MDH/IDT
Thomas Larssons OH 1-5 CD5250 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 CD5250 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! CD5250 OOP med C++ Mats Medin MDH/IDT
Operatorer, nyckelord + - * / % (remainder) < <= == != >= > && || ! = ++ -- += -= etc. ? : sizeof , :: . -> [] () new delete & | ~ ^ << >> &= |= ^= Reserverade nyckelord se tabell i boken s.84 CD5250 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. CD5250 OOP med C++ Mats Medin MDH/IDT
Explicit typkonvertering variabel = static_cast<önskadtyp>(uttryck) På samma sätt: dynamic_cast const_cast reinterpret_cast Använd inte gamla skrivsättet: önskadtyp(uttryck) eller (önskadtyp)uttryck CD5250 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 CD5250 OOP med C++ Mats Medin MDH/IDT
iostream library #include <iostream> int mittTal; cout << ”Gissa ett heltal” << endl; cin >> mittTal; cerr << ”Det var fel!” << endl; CD5250 OOP med C++ Mats Medin MDH/IDT
I/O mot filer #include <fstream> // 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; CD5250 OOP med C++ Mats Medin MDH/IDT
Klassen string // Smartare än char * ! #include <string> string myString(“Vi testar string”); const string tomStr; if ( ! yourString.size()) if (yourString.empty()) if (myString == yourString) cin >> myString CD5250 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? CD5250 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 CD5250 OOP med C++ Mats Medin MDH/IDT
Mer pekare minTyp* pMinTyp = new minTyp[bufstorl]; pMinTyp++; pekare till funktion CD5250 OOP med C++ Mats Medin MDH/IDT
! objA objB 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 CD5250 OOP med C++ Mats Medin MDH/IDT
<vector> // Smartare än array #include <vector> vector<int> minHeltalsVektor(100); // Nu använder vi en klassmall dinVektor = minVektor; if (dinVektor.empty()) while (cin >> word) minVektor.push_back(word); CD5250 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 CD5250 OOP med C++ Mats Medin MDH/IDT
Lurigt? int evaluate(HugeObj &hObj); myValue = evaluate(myHugeObj); int evaluate(HugeObj *hObj); myValue = evaluate(&myHugeObj); CD5250 OOP med C++ Mats Medin MDH/IDT
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, Överlagring av funktioner CD5250 OOP med C++ Mats Medin MDH/IDT
scope 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; // - “ - Vad händer? Det räcker inte att returvärdets typ eller parametrarnas namn skiljer CD5250 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) CD5250 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 CD5250 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? CD5250 OOP med C++ Mats Medin MDH/IDT
Labbmiljön • Inloggning • Lösenord • Borland Turbo C++ CD5250 OOP med C++ Mats Medin MDH/IDT