1 / 21

C++ - förbättrat C?

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. Datatyper. (Repetera C:s, Stroustrup 4).

abril
Download Presentation

C++ - förbättrat C?

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

  2. Datatyper (Repetera C:s, Stroustrup 4) • (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) CD5250 OOP med C++ Mats Medin MDH/IDT

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

  4. Implicit typkonvertering (Som i C) • 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

  5. Explicit typkonvertering variabel = static_cast<önskadtyp>(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) CD5250 OOP med C++ Mats Medin MDH/IDT

  6. Namespaces (Stroustrup 3.3, 8.1-8.2) 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

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

  8. I/O mot filer (Stroustrup 21.5 t.o.m. 21.5.2) #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

  9. Klassen string (Stroustrup 3.5) (20 för den som vill läsa mer) // 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

  10. Referenser (Stroustrup 5.5) ”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

  11. dynamisk minnesallokering pekare, new och delete (Stroustrup 5.1, 5.6) 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) CD5250 OOP med C++ Mats Medin MDH/IDT

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

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

  14. <vector> (Stroustrup 3.7.1) (3.7.2 för den som vill läsa mer) // 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

  15. Funktioner i C++ (Stroustrup 7.1-7.3, 7.5-7.6, 7.9) 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

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

  17. 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 (Stroustrup 7.4) CD5250 OOP med C++ Mats Medin MDH/IDT

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

  19. inline (Stroustrup 7.1.1) (7.8 till exklusive 7.8.1 För den som vill läsa mer) 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

  20. Funktionsmallar (Stroustrup 13.3) (mer om mallar senare) 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

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

More Related