EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Relevanta dokument
Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

TDIU01 (725G67) - Programmering i C++, grundkurs

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TDIU01 - Programmering i C++, grundkurs

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

TDIU01 - Programmering i C++, grundkurs

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

C++ - En introduktion

Objektorienterad Programmering (TDDC77)

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Repetition C-programmering

Introduktion C-programmering

Det finns många flaggor till g++,

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Tentamen EDAF30 Programmering i C++

Föreläsning 1: Momstabellen i C++

Innehåll. Pekare Syntax

Innehåll. Pekare Exempel

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Enkla datatyper minne

Programmering B med Visual C

Innehåll. Pekare Exempel

SMD 134 Objektorienterad programmering

F4. programmeringsteknik och Matlab

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Introduktionslaboration

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

TDIU01 - Programmering i C++, grundkurs

Introduktionslaboration

Classes och Interfaces, Objects och References, Initialization

TDDC76 - Programmering och Datastrukturer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Objektorienterad programmering Föreläsning 4

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

OOP Objekt-orienterad programmering

C++ - En introduktion

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Innehållsförteckning

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TDDC77 Objektorienterad Programmering

Programmering för språkteknologer I, VT2012. Rum

Typkonvertering. Java versus C

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Objektorientering i liten skala

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

C++-programmets beståndsdelar

Anteckningar 1: Grundläggande saker

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

Kapitel 5. Strömmar. Utmatning

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

TDIU01 - Programmering i C++, grundkurs

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Tentamen EDAF30 Programmering i C++

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Innehåll. Pekare. Datatyper Pekare, Arrayer och Referenser. Pekare Syntax. Pekare Syntax, operatorer. 4. Standard-containers. Pekare och arrayer

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Objektorienterad programmering i Java

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Programmering A. Johan Eliasson

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Data, typ, selektion, iteration

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

grundläggande C++, funktioner m.m.

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

C++ Slumptalsfunktioner + switch-satsen

Föreläsning 3-4 Innehåll

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

TDDC76 - Programmering och Datastrukturer

Övning2. Variabler. Data typer

TDIU01 - Programmering i C++, grundkurs

Transkript:

EDAf30: Programmering i C++, 7.5 hp EDAF30 Programmering i C++ 1. Introduktion Sven Gestegård Robertz Datavetenskap, LTH 2015 Mål: Kursens syfte är att ge kunskaper i objektorienterad programmering i C++. Kunskap och förståelse kunna förklara grundläggande begrepp inom objektorienterad C++-programmering kunna tolka, analysera och förklara befintlig C++-kod. Färdighet och förmåga kunna utveckla ett fungerande C++-program från en given specifikation kunna felsöka metodiskt i C++-kod. Om kursen 1. Introduktion 2/26 EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment EDAf30: Programmering i C++, 7.5 hp Administration Kursen examineras genom laborationer inlämningsuppgifter skriftlig tentamen Kursprogram Kurregistrering Anmälan till laborationer Slutbetyget baseras på den skriftliga tentamen. Om kursen 1. Introduktion 3/26 Om kursen 1. Introduktion 4/26 Historik C++ härstammar från Simula och C. C++ är inte en ren utökning av C 1967: Simula (Dahl & Nygaard) 1972: C (Dennis Ritchie) 1978: K&R C (Kernighan & Ritchie) 1980: C with Classes (Bjarne Stroustrup) 1985: C++ (Bjarne Stroustrup) ISO-standard 1998 Andra släktingar: 1995: Java (James Gosling et al.) 2000: C# (Anders Hejlsberg) virtuell maskin automatisk minneshantering säkra språk både ISO C och ISO C++ härstammar från K&R C, och är syskon Vissa detaljer är inkompatibla mellan C och C++ Ytorna är inte skalenliga Generellt: skriv inte C++ som om det vore C Presentation av C++ : Historik 1. Introduktion 5/26 Presentation av C++ : Historik 1. Introduktion 6/26

Ett första program i C++ Hello, World! hello.cpp std::cout << "Hello, World!" << std::endl; Vad är ett program? C++ är ett kompilerat språk Källkod Objektfil Exekverbar fil hello.cpp Källkodsfil 1 Kompilering Objektfil 1 Länkning.exe-fil cout << "Hello, World!" << endl; Källkodsfil 2 Kompilering Objektfil 2 Presentation av C++ : Inledning 1. Introduktion 7/26 Presentation av C++ : Inledning 1. Introduktion 8/26 Vad är C++? Datatyper Primitiva typer ISO-standarden för C++ definierar två saker Språket C++ (Core language features ), t ex datatyper (t ex char, int) kontrollflödesmekanismer (t ex if- och whilesatser). Standardbiblioteket (Standard-library components), t ex Datastrukturer (t ex string, vector och map) Operationer för in- och utmatning (t ex << och getline()) Algoritmer (tex find() och sort()) Deklarationerna inkluderas med t ex #include <vector> Heltalstyper: char, short, int, long, long long signed (som i Java ) unsigned (icke-negativa tal, finns inte i Java) Flyttalstyper: float, double, long double bool (boolean i Java) Pekare (heltalstyp, aritmetik, till skillnad från i Java) Referenser (konstanta och kan inte vara null ) 1 1 Egentligen inte en typ, utan ett alias till ett objekt Presentation av C++ : Inledning 1. Introduktion 9/26 Presentation av C++ : Datatyper och variabler 1. Introduktion 10/26 Datatyper Sammansatta typer Variabler Arrayer ( fält, vektorer. Som i Java, fast osäkra C-strängar är char[] kan ha godtycklig typ som element struct, class (som klass i Java. Medlemsvariabler kallas ibland fält ) std::string (liknar java.lang.string) std::vector, std::list... (liknar motsvarande i java.util) Några begrepp: en deklaration introducerar ett namn en typ definierar mängden möjliga värden och operationer (för ett objekt) ett objekt är ett stycke minne som innehåller ett värde ett värde är en följd bitar som ska tolkas enligt en viss typ. en variabel är ett namngivet objekt En variabel deklarerad const får inte ändras (final i Java) En variabel deklarerad constexpr måste ha ett värde som kan beräknas vid kompilering. Regler för variabler: En variabel måste deklareras En variabel bör initieras ( En konstant måste initieras) Presentation av C++ : Datatyper och variabler 1. Introduktion 11/26 Presentation av C++ : Datatyper och variabler 1. Introduktion 12/26

Variabler Deklaration utan initiering (undvik) int x; int x7; // Rekommenderad stil i C++ int y = 7; // C++ med extra = int z = 7; // C-stil C-stil: Se upp med implicit typkonvertering int x = 7.8; int y 7.8; // x == 7. Ger ingen varning // ger varning (eller fel med -pedantic-errors) Presentation av C++ : Datatyper och variabler 1. Introduktion 13/26 Variabler Automatisk typinferens auto: Man behöver inte ange typen på en variabel om den kan härledas från initieringen. auto x = 7; auto c = c ; auto b = true; auto d = 7.8; // int x // char c // bool b // double d NB! med auto finns ingen risk för felaktig typkonvertering, så det är säkert att använda tilldelning (=). Använd inte auto om du behöver vara explicit med typdeklarationen, t ex om att ange typen gör koden mer lättläst man vill bestämma talområde eller precision (t ex int/ long eller float/ double) Presentation av C++ : Datatyper och variabler 1. Introduktion 14/26 Arrayer ( C-arrayer, fält ) Deklaration utan initiering int x[7]; // innehåller odefinierade värden av int-array int a[7] 0, 1, 2, 3, 4, 5, 6; int b[20] 0, 1, 2, 3; // resten av elementen initieras till 0 Utelämnande av längden int b[] 1, 1, 0, 1, 0, 0, 1; Initiering med = som i C int a[7] = 0, 1, 2, 3, 4, 5, 6; int b[] = 1, 1, 0, 1, 0, 0, 1; C-arrayer tilldelning, djup kopiering int a[7] = 0, 1, 2, 3, 4, 5, 6; int b[7] = 1, 1, 0, 1, 0, 0, 1; Ej tillåtna tilldelningar b = a; //"invalid array assignment" b = 1, 1, 0, 1, 0, 0, 1; //"assigning from an initializer list" Korrekt men omständligt for (int i=0; i!= 7; ++i) b[i]=a[i]; int i=0; for(int d : 1, 1, 0, 1, 0, 0, 1) b[i++] = d; Presentation av C++ : Datatyper och variabler 1. Introduktion 15/26 Presentation av C++ : Datatyper och variabler 1. Introduktion 16/26 Operatorer Gemensamma med Java + - * / % ++ -- += -= *=... Trinära villkorsoperatorn (som i Java) z = (x>y)? x : y; if (x>y) z=x; else z=y; Konsoll-I/O Programexempel In- och utmatning string namn; cout << "Vad heter du? "; cin >> namn; cout << "Goddag, " << namn << "!" << endl; Många fler, t ex Medlems- och pekaroperatorer: [] * &. -> In- och utmatning: << >> Presentation av C++ : Datatyper och variabler 1. Introduktion 17/26 Presentation av C++ : In- och utmatning 1. Introduktion 18/26

Manipulatorer Inmatning Fil att inkludera #include <iomanip> Antal positioner... << setw(4) << antal <<... // Gäller bara nästa utskrift (antal) Antal decimaler... << fixed << setprecision(2) << a <<... << x // Gäller tills nästa setprecision Läs och returnera nästa tecken cin.get() Läs ett antal tecken till C-strängen str cin.getline(str, antal) Returnera en kopia av nästa tecken (oläst) cin.peek() Läs nästa tecken och släng det cin.ignore() Presentation av C++ : In- och utmatning 1. Introduktion 19/26 Presentation av C++ : In- och utmatning 1. Introduktion 20/26 Filhantering Bibliotek Fil att inkludera #include <fstream> Läsa från fil ifstream f1("infil.txt"); f1 >> ord;... f1.close(); Skriva till fil sin, cos, sqrt, log, exp, floor... #include <cmath> rand, srand, abs, labs... #include <cstdlib> ofstream f2("utfil.txt"); f2 << namn << " " << telnr << endl;... f2.close(); Presentation av C++ : In- och utmatning 1. Introduktion 21/26 Presentation av C++ : C-standardbiblioteket 1. Introduktion 22/26 Slumptal <cstdlib> Slumptal Bättre C++: kapsla slumpgenereringen i ett objekt Tärning #include <cstdlib> #include <ctime> Anta att vi har en klass Rand_int som ger slumptal i ett intervall [min, max]. med RandInt-objekt C-varianten int antal; cout << "Antal kast: "; cin >> antal; srand(time(0)); //Nytt startvärde varje gång for (int i=0; i<antal; i++) cout << rand()%6+1 << " "; int main() unsigned long seed = time(0); Rand_int dice1,6, seed; int n20; for(int i = 0; i!= n; ++i) cout << dice() << " "; unsigned int seed = time(0); srand(seed); int n20; for (int i=0; i<n; i++) cout << rand()%6+1 << " "; Presentation av C++ : C-standardbiblioteket 1. Introduktion 23/26 Presentation av C++ : C-standardbiblioteket 1. Introduktion 24/26

Slumptal Exempel på slumptalsgenerator-klass Slumptalsgeneratorn Rand_int #include <random> class Rand_int public: Rand_int(int low, int high) :distlow,high Rand_int(int low, int high, unsigned long seed) :reseed, distlow,high int operator()() return dist(re); private: std::default_random_engine re; std::uniform_int_distribution<> dist; ; Detaljerna i denna klass kommer att förklaras senare i kursen. Vi har talat om Kursen C++ Historik Datatyper och variabler Jämförelser med Java och C Något om I/O och standardbibliotek Nästa föreläsning: Tecken och texter Vi kommer att studera Tecken och teckenkodning Strängar, C-strängar och std::string Standardbibliotek och I/O Presentation av C++ : C-standardbiblioteket 1. Introduktion 25/26 Sammanfattning 1. Introduktion 26/26