Presentation laddar. Vänta.

Presentation laddar. Vänta.

SUMMERING AV C++ I Objektorienterad Programmering i C++ I.

Liknande presentationer


En presentation över ämnet: "SUMMERING AV C++ I Objektorienterad Programmering i C++ I."— Presentationens avskrift:

1 SUMMERING AV C++ I Objektorienterad Programmering i C++ I

2 Högnivåspråk C++ är ett högnivåspråk Använder funktioner (procedurellt) Objektorienterat C++ är ett kompilerande språk Källkod kompileras till objektkod (maskinkod) En eller flera objektfiler länkas till en körbar fil (*.exe) Kompilering Länk- ning Ladda a.cpp b.cpp a.obj b.obj ab.exe Kör- ning

3 Datatyper Enkla datatyper (variabler, konstanter) Heltal: int,short Flyttal: float, double, Tecken: char Boolsk: bool Sammansatta datatyper Vektor (array): int tal[10] char namn[20]; S truktur: struct Time { int hour; int min; int sec; };

4 In- och utmatning Oformaterad int num; cout <<”Mata i ett heltal: ”; cin >> num; cout << 5*num << endl; Formaterad float x = ; cout << fixed << setprecision(2); cout << "x= " << setw(8) << x; Utskrift. X= // 5:an står i kolumn 8.

5 Aritmetik Addition + Subtraktion- Multiplikation* Division/ (”vanlig” och heltalsdivision) Rest vid heltalsdiv. % int a=14, b=4; int c=a/b; // c= 3 heltalsdivision c = a%b // c= 2 resten vid heltalsdivision float a=14.0, b=4.0; float c=a/b; // c=3.5 Prioritet : * och / går före + och – (m. fl.)

6 Funktioner Några exempel på funktioner som har noll, en eller flera parametrar och med eller utan returvärde: void funktion1(void); void funktion2(int x1); int funktion3(int x1); float squareSum(float x1, float x2); Ovanstående är exempel på funktionsprototyper. Här följer en funktionsdefinition för en av dem: float squareSum (float x1, float x2) { return x1*x1 + x2*x2; } x1 och x2 är s.k. parametrar.

7 Anrop av funktion float y, p= 2.4, q=4.5; y = squareSum(p,q); y får värdet 2, ,5 2 = 26,01 I ovanstående funktion görs värdeanrop. Man kan också använda referensanrop och pekaranrop (se avsnittet om pekare, vektorer och funktioner). p och q är aktuella parametrar Referensanrop på nästa bild

8 Anrop av funktioner II Referensanrop void swap(int &x, int &y) // referensanrop { int tmp = x; x = y; y = tmp; } int p=5, q=10; swap(p,q); // nu är p=10 och q=5; …

9 Styrande strukturer Upprepning for(int i=0; i<5; i++) sats; int i=0; while(i<5) { sats; i++; } int i=0; do { sats; i++; }while(i<5);

10 Val if(i<5) sats1; else sats2; Om man vill använda mer än en sats i ovanstånde if-sats skriver man parenteser: { sats1a; sats1b; } switch(testvariabel) { case etikett1: sats1; break; case etikett2: sats2; break; case etikett3: sats3; break; default : sats4; }

11 Operatorer Testoperatorer = == != Operatorn == definierar likhet. Exempel: if(a==b) cout << “a är lika med b”; Logiska operatorer eller || och && icke ! if( a>=1 && <=10) cout << “a ligger i intervallet 1 – 10”;

12 Operatorer II Tillväxt- och minskningsoperatorerna Tillväxt: ++ Minskning: -- Prefixversion och postfixversion: int a=5; cout << ++a;// prefix skriver: 6 // a = 6 här cout << a++;// postfix skriver: 6 // a = 7 här

13 Operatorer III Kombinerad tilldelning += -= *= /= %= Exempel: int sum=0; for(int i=1; i<=10; i++) sum+=i; // sum = sum + i;

14 Vektorer Vektorbegreppet // Deklarera en vektor med tre element int x[3]; // Initiera X[0] = 34; X[1] = -45; X[2] = 789; X Observera åtkomst av det enskilda elementet med index, t.ex. x[1] innehåller talet –45 // Deklarera och initiera en vektor direkt int x[] = {34, -45, 789};

15 Exempel med en större vektor const SIZE=100; randomize(); int y[SIZE]; for(int i=0; i

16 Strängar Inkludera klassen #include Deklarera strängvariabler: string s1, s2, s3; s1 = “Peter"; s2 = “Svensson”; s3 = s1+ “ “ +s2; s3 blir nu = “Peter Svensson” Inmatning cin >> s3; getline(cin,s3);

17 Strängar II Jämförelseoperatorerna gäller = == != Övrigt: Sökning i strängar med s1.find(searchStr); Insättning i strängar med s1.insert(pos,insertStr); m.fl. funktioner

18 Teckenvektorer Deklarering och initiering av en sträng: char name[6] = ”Peter” Index Innehåll’P’’e’’t’’e’’r’’\0’ ’\0’ = nullteckenet. Det talar om att strängen är slut

19 Funktioner för teckenvektorer strcpy(destination, källa) kopierar en sträng från källa till destination strlen(s) reurnerar den aktuella längden på s strcat(s1,s2) lägger strängen s2 till strängen s1 Inmatning av strängar char name[20]; Alternativ 1: cin >> name ; // Inmatningen avbryts med Enter, mellanslag etc. // (Whitespaces) Alternativ 2: cin.getline(name,20); // Inmatningen avbryts med Enter.

20 Enum Skapa symboliska konstanter för veckodagarna: enum Days {mon,tue,wed,thu,fri,sat,sun}; Deklarera en variabel av denna datatyp: Days day; Använd variabeln: day = wed; switch(day) { case mon: cout << "måndag";break; case tue: cout << "tisdag";break; case wed: cout << "onsdag";break; case thu: cout << "torsdag";break; case fri: cout << "fredag";break; case sat: cout << "lördag";break; case sun: cout << "söndag";break; }

21 Strukturer Definiera en struktur: struct Time { int hour; int min; int sec; }; Deklarera och initiera en variabel med denna struktur som datatyp : Time time ={12,25,30}; Skriv ut tiden: cout << "Tid: " << time.hour << “:"<< time.min << “:" << time.sec; Ger utskriften: Tid: 12:25:30

22 Pekare Gör plats för en adress till ett heltal. * = pekaroperatorn int *number; Deklarera en heltalsvariabel int n=23; Låt number peka på minnesutrymmet där n ligger. & = adressoperatorn number = &n Skriv ut heltalet med hjälp av pekarvariabeln. *= innehållsoperatorn (dereferensoperatorn) cout << *number;

23 Allokera plats på heapen Dynamisk allokering av plats för data Allokera plats på heapen för en int int *number = new int; Lägg värdet 23 på denna plats i minnet *number = 23;

24 Pekare och vektorer Deklarera en vektor int x[] = {10,20,30,40,50}; x är egentligen en pekare som pekar på minnescellen där första heltalet i vektorn lagras. Därför kan man skriva: int *ipek; ipek = x; // Adresserna sätts lika. Två alternativ för åtkomst av enskilda element i vektorn: 1) cout << x[2]; // Vektornotation 2) cout << *(ipek+2); // Pekarnotation

25 Dynamisk allokering av vektor Allokera plats för en vektor med 10 heltal på heapen: int *x = new int[10]; … Frigör plats allokerad för en vektor delete []x;

26 Pekare, vektorer och funktioner Om man vill skicka en vektor som argument ( para- meter) till en funktion skickar man adressen till första elementet i vektorn. Detta kallas pekaranrop. void setVektor(int *v, int num) { for( int i=0; i

27 //programsnutt int *x = new int[10]; setVektor(x,10); showVektor(x,10); //programsnutt int *x = new int[10]; setVektor(x,10); showVektor(x,10); Pekare, vektorer… II

28 Uppdelning av program När man skriver större program delar man upp dem i flera filer: huvudfil.cpp innehåller main = huvudprogrammet. #include Addera fil1.cpp till projektet fil1.h funktionsprototyper Strukturdeklarationer fil1.cpp funktionsdefinitioner till fil1.h #include

29 Filhantering Inkludera #include Använd klasserna: ofstream för att skriva på fil ifstream för att läsa från fil fstream för att både skriva och läsa Två typer av filer Textfiler Binärfiler Direktåtkomst Se även lathund för strömmar

30 Textfiler Spara och läs radvis string fileName = "test.dat"; ofstream fil1(fileName.c_str()); cout <<”Spara följande på filen " << fileName; string data; getline(cin,data); fil1 << data; // Sparar på filen test.dat fil1.close(); ifstream fil2(fileName.c_str()); string dataFromFile; getline(fil2,dataFromFile); // Läser från filen cout << dataFromFile; fil2.close(); string fileName = "test.dat"; ofstream fil1(fileName.c_str()); cout <<”Spara följande på filen " << fileName; string data; getline(cin,data); fil1 << data; // Sparar på filen test.dat fil1.close(); ifstream fil2(fileName.c_str()); string dataFromFile; getline(fil2,dataFromFile); // Läser från filen cout << dataFromFile; fil2.close();

31 Spara en struktur på textfil struct Pers{ string firstName; string lastName; int shoeNr; }; string fileName = "TextTest1.txt"; Pers person[SIZE]; // Skriv till textfil fstream f(fileName.c_str(), ios::out); if(f.is_open()) { for(int i=0; i

32 Läs en struktur från textfil // Forts från föregående sida Pers person2[SIZE]; f.open(fileName.c_str(),ios::in); int nr =0; if(f.is_open()) { Pers tmp; while(f >>tmp.firstName>>tmp.lastName>>tmp.shoeNr) { person2[nr] = tmp; nr++; } f.close(); } // Forts från föregående sida Pers person2[SIZE]; f.open(fileName.c_str(),ios::in); int nr =0; if(f.is_open()) { Pers tmp; while(f >>tmp.firstName>>tmp.lastName>>tmp.shoeNr) { person2[nr] = tmp; nr++; } f.close(); }

33 Skriv till binärfil (ingår inte) struct Pers{ char firstName[30]; char lastName[30]; int shoeNr; }; string fileName = ”BinärTest1.txt"; Pers person[SIZE]; const int postSize = sizeof (TPers); // Öppna binärfil för skrivning fstream fil(fileName.c_str(),ios::out||ios::binary); fil.seekp(0); // Ställ filpekaren i filens början for(int i=0;i

34 Läs från binärfil (ingår inte) //Forts från föregående sida Pers tempPerson; // Öppna binär fil för läsning fstream fil(fileName.c_str(),ios::in||ios::binary); fil.seekg(0); // Ställ filpekaren i början av filen // Läs och skriv ut tills filen är slut while(fil.read((char *)&tempPerson,postSize)) cout << "Hej " << tempPerson.firstName << ” "<< tempPerson.lastName << ". Skonummer = " << tempPerson.shoeNr << endl; fil.close(); //Forts från föregående sida Pers tempPerson; // Öppna binär fil för läsning fstream fil(fileName.c_str(),ios::in||ios::binary); fil.seekg(0); // Ställ filpekaren i början av filen // Läs och skriv ut tills filen är slut while(fil.read((char *)&tempPerson,postSize)) cout << "Hej " << tempPerson.firstName << ” "<< tempPerson.lastName << ". Skonummer = " << tempPerson.shoeNr << endl; fil.close();


Ladda ner ppt "SUMMERING AV C++ I Objektorienterad Programmering i C++ I."

Liknande presentationer


Google-annonser