Objektorienterad Programmering i C++ I

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

De fundamentala datatyperna
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Välkommen Vahid Mosavat
Att programmera i språket Java
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Repetition inför slutprovet
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Programmering B PHP Lektion 1 Mahmud Al Hakim Folkuniversitetet
Programmering B PHP Lektion 2
Modulär programutveckling
Rör vi oss? Det beror på vad vi jämför oss med.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
F2 - Intro till Java1 Föreläsning 2 - Intro till Java  Sammanfattning av Lektion 1 (kap 2): Vad behövs för att kunna programmera? – DrJava ( t ex) – Java.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Uppgifter/Läxa Lös uppgifterna: 120, 121, 123, 125, 126, 128, 130, 133, 142, 144, 145.
Hud & hudsjukdomar Fredrik Hieronymus.
Behandlas under 4 kursträffar i mineralmuseet
Kapitel 3 Sannolikhet och statistik
Kap. 3 Derivator och Integraler
Sol i Syd Projektdagen 2017 Region Blekinge
SP Sveriges Tekniska Forskningsinstitut
KONJUNKTURINSTITUTET
KPP053, HT2016 MATLAB, Föreläsning 2
Behandlas under 4 kursträffar i mineralmuseet mars-april 2017
GEOGRAFI.
Så tycker de äldre om äldreomsorgen 2016
Men kolla bildspelet vecka 18 först
Nordiska Lärarorganisationers Samråd
Arbetsgrupp ”Hat och hot mot förtroendevalda”
ULA Kompetenscenter - en del av TPY
Framgångsfaktorer för en global projektverksamhet
Nya regler om energi i BBR
Sannolikhet och statistik
Lagen om Energikartläggning i stora företag
Lektion 4.
Tularemi.
Information till primärvården Herman Nilsson-Ehle Catharina Lewerin
Inför avtalsrörelsen 2016 Lars Calmfors
Lagen om Energikartläggning i stora företag
Fosfor från Östersjöns djupbottnar är problemet
Dagens ämnen Matriser Räkneoperationer och räknelagar
Regiongemensam enkät i förskola och familjedaghem 2016
Hur får vi fler att söka till Teknikcollege ?
det är den här processen
Uppföljning av år 2016 HFS-nätverket
BILDSPEL ABISKO, ev. YOUTUBE KLIPP
Visit Karlskoga Degerfors
Vårdprevention - en introduktion för medarbetare på sjukhus
Trygg, säker och samordnad vård- och omsorgsprocess
BYGDSAM Anundsjö Grundsunda BLT Nätra.
Nyheter i tredje upplagan av Handbok Riskanalys och Händelseanalys
Arbetsmarknadsutsikterna hösten 2016
Dagläger MTB i Högbobruk
Sportlovsläger 9-12 feb Årshjulet med läger på skolloven börjar med ett dagläger för våra tävlingsgymnaster Vi hälsar alla gymnasterna i S- och R-ben samt.
Medlemsinfo Tenhults IF
Välkommen till vårt Öppet Hus, SeniorNet Huddinge
Attraktiv Hemtjänst Introduktion i att utvärdera hemtjänst
Presentation av verksamhetsplan
20% rabatt (På ordinarie priser)
Nu finns det möjlighet att köpa en klubboverall via Team Sportia
Klubbprofil 2016 Vid beställning till ert lag kontakta Team Sportia Klubb & Företag Örebro. Hagmarksgatan 56 Tel Mobil
KLUBBOVERALL DIF P06 Spelarens namn: Storlek överdel: Storlek byxa:
Presentationens avskrift:

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

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

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; };

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

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

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.

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

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; …

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

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;

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”;

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

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

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};

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; }

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);

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

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

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.

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; }

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  

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;  

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;

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

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;

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

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

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

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

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();

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 }

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();

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

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();