1 / 28

C++ kurs CD5250, vårterminen 2000

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.

cassara
Download Presentation

C++ kurs CD5250, vårterminen 2000

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. 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

  2. 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

  3. 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

  4. 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

  5. Ö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

  6. Thomas Larssons OH 1-5 CD5250 OOP med C++ Mats Medin MDH/IDT

  7. 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

  8. 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

  9. Operatorer, nyckelord + - * / % (remainder) < <= == != >= > && || ! = ++ -- += -= etc. ? : sizeof , :: . -> [] () new delete & | ~ ^ << >> &= |= ^= Reserverade nyckelord se tabell i boken s.84 CD5250 OOP med C++ Mats Medin MDH/IDT

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. Mer pekare minTyp* pMinTyp = new minTyp[bufstorl]; pMinTyp++; pekare till funktion CD5250 OOP med C++ Mats Medin MDH/IDT

  19. ! 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

  20. <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

  21. 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

  22. Lurigt? int evaluate(HugeObj &hObj); myValue = evaluate(myHugeObj); int evaluate(HugeObj *hObj); myValue = evaluate(&myHugeObj); CD5250 OOP med C++ Mats Medin MDH/IDT

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. Labbmiljön • Inloggning • Lösenord • Borland Turbo C++ CD5250 OOP med C++ Mats Medin MDH/IDT

More Related