Ladda ner presentationen
1
Objektorienterad Programmering i C++ I
SUMMERING AV C++ I Objektorienterad Programmering i C++ I
2
Högnivåspråk C++ är ett högnivåspråk C++ är ett kompilerande 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) a.cpp a.obj Kör- ning Kompilering Länk- ning ab.exe Ladda b.cpp b.obj Kompilering
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]; Struktur: struct Time { int hour; int min; int sec; };
4
In- och utmatning Oformaterad Formaterad 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. Fixed och setprecision kräver inkluderingsfilen <iomanip>
5
Aritmetik Prioritet : * och / går före + och – (m. fl.) 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,42 + 4,52 = 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) { i++; } do }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: ++
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:
+= -= *= /= %= 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<SIZE; i++) y[i] = random(100)+1; { cout << setw(5) << y[i] ; if((i+1)%10==0) cout << endl; }
16
Strängar Inkludera klassen <string> Deklarera strängvariabler:
#include <string> 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<num; i++) v[i] = 2*i + 5; } void showVektor(const int v[], int num) for( int i=0; i<0; i++) cout << v[i] << ” ”; Forts. På nästa sida
27
Pekare, vektorer… II //programsnutt int *x = new int[10];
setVektor(x,10); showVektor(x,10);
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 <fil1.h> Addera fil1.cpp till projektet fil1.h funktionsprototyper Strukturdeklarationer fil1.cpp funktionsdefinitioner till fil1.h
29
Filhantering Inkludera Använd klasserna: Två typer av filer
#include <fstream> 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();
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<SIZE; i++) f << person[i].firstName << ' ' << person[i].lastName << ' ' << person[i].shoeNr << endl; f.close(); // Stäng filen }
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();
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<SIZE;i++) fil.write((char *)&person[i],postSize); fil.close(); // forts på nästa sida
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();
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.