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

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

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

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

Innehåll. Pekare Exempel

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

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

Innehåll. Pekare Exempel

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

Objektorienterad Programmering (TDDC77)

Introduktion C-programmering

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

Funktionens deklaration

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

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

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

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

Repetition C-programmering

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

Objektorienterad programmering

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

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

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

Det finns många flaggor till g++,

TDIU01 - Programmering i C++, grundkurs

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

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

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

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

C++ - En introduktion

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

Innehåll. Pekare Syntax

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

Enkla datatyper minne

C++-programmets beståndsdelar

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

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

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

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

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

Classes och Interfaces, Objects och References, Initialization

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

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

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Typkonvertering. Java versus C

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursassistent: Mårten Björkman,

(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

1 Funktioner och procedurell abstraktion

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

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++

Tentamen EDAF30 Programmering i C++

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

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

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

Föreläsning 3-4 Innehåll

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

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

Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering

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.

Föreläsning 6: Metoder och fält (arrays)

TDIU01 Programmering i C++

Planering Programmering grundkurs HI1024 HT 2014

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Övning från förra gången: readword

TDDC76 - Programmering och Datastrukturer

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

OOP Objekt-orienterad programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Introduktion till arv

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

Poster ( structar ) Postdeklarationer

Introduktionslaboration

Programmering A. Johan Eliasson

TDIU01 - Programmering i C++, grundkurs

F4. programmeringsteknik och Matlab

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

Programmeringsteknik med C och Matlab

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

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

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

Transkript:

Innehåll EDAF30 Programmering i C++ 1. Introduktion 1 Om kursen Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Presentation av C++ Historik Inledning Datatyper och variabler 1. Introduktion 2/1 Viktiga skillnader mot Java Mål: Kursens syfte är att ge kunskaper i objektorienterad programmering i C++. Kunskap och förståelse känna till och kunna beskriva skillnaderna mellan C++ och Java vara förtrogen med språket C++ och standardbiblioteket STL 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 3/40 Nya eller utökade begrepp i C++ (jämfört med Java / grundkursen): Pekare och minneshantering : värde- och referensanrop Polymorfism: både statisk och dynamisk (Jfr templates med generics) Om kursen 1. Introduktion 4/40 Obligatoriska moment Administration Kursen examineras genom laborationer inlämningsuppgifter skriftlig tentamen Kursprogram Kurregistrering Anmälan till laborationer Görs på webben, länk på kurshemsidan Anmälan görs till en labbgrupp samma tid alla veckor Slutbetyget baseras på den skriftliga tentamen. Om kursen 1. Introduktion 5/40 Om kursen 1. Introduktion 6/40

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 7/40 Presentation av C++ : Historik 1. Introduktion 8/40 Vad är C++? Ett minimalt program i C++ 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 while-satser). 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> Standardbiblioteket är skrivet i vanlig C++ Exempel på vad man kan göra empty.cpp int main ( ) har inga parametrar gör ingenting returvärdet från main() tolkas av systemet som en felkod skilt från noll betyder fel inget returvärde tolkas som noll (OBS! endast i main()) används sällan i Windows används ofta på Linux/Mac Presentation av C++ : Historik 1. Introduktion 9/40 Presentation av C++ : Inledning 1. Introduktion 10/40 Ett första program i C++ Hello, World! hello.cpp int main ( ) std :: cout << "Hello, World!" << std :: endl ; return 0; Vad är ett program? C++ är ett kompilerat språk Källkod Objektfil Exekverbar fil hello.cpp using std :: cout ; using std :: endl ; Källkodsfil 1 Objektfil 1 Länkning.exe-fil int main ( ) cout << "Hello, World!" << endl ; return 0; Källkodsfil 2 Objektfil 2 Presentation av C++ : Inledning 1. Introduktion 11/40 Presentation av C++ : Inledning 1. Introduktion 12/40

Ett program i C++ Exempel: beräkna och skriv ut x 2. double square ( double x) return x*x; void print_square ( double d) std :: cout << "the square of " << d << " is " << square (d) << std :: endl ; int main ( ) print_square (1.234); return 0; Deklaration och definition Det huvudsakliga sättet att få något gjort i C++: Anropa en funktion som gör det En funktion måste ha blivit deklarerad för att kunna anropas En funktionsdeklaration anger namn returtyp typer för argument (parametrar) Exempel int random (); void exit (int ); Kompilatorn ignorerar parameternamn double square ( double ) Ange namn om det ökar läsbarhet int pow(int x, int exponent ); En definition av en funktion innehåller implementationen Får bara finnas på ett ställe Presentation av C++ : Inledning 1. Introduktion 14/40 Presentation av C++ : 1. Introduktion 15/40 Skillnad från Java Funktionsdefinition Exempel Deklaration och definition I Java kan bara funktioner och variabler deklareras inuti klasser. I C++ kan funktioner och variabler finnas oberoende av klasser. fria funktioner: tillhör inte någon klass medlemsfunktioner i en klass globala variabler medlemsvariabler Exempel: Medelvärde variant 1 double medelv ( double x1, double x2) // Deklaration och definition double a=2.3, b =3.9; cout << medelv (a, b) << endl ; Presentation av C++ : 1. Introduktion 16/40 Presentation av C++ : 1. Introduktion 17/40 Funktionsdefinition Med tidigare deklaration Framåtdeklaration (Forward declaration) Funktionsdefinition efter main Exempel: Medelvärde variant 2 double medelv (double, double ); // deklaration ( prototyp ) double a=2.3, b =3.9; cout << medelv (a, b) << endl ; // anv ä ndning double medelv ( double x1, double x2) // definition Funktionsdefinition Med tidigare deklaration Framåtdeklaration (Forward declaration) Funktionsdefinition efter main Exempel: Medelvärde variant 2 double medelv (double, double ); // deklaration ( prototyp ) # include " medelv.h" double a=2.3, b =3.9; cout << medelv (a, b) << endl ; // användning double medelv ( double x1, double x2) // definition Presentation av C++ : 1. Introduktion 18/40 Presentation av C++ : 1. Introduktion 18/40

Exempel: Headerfil Hantera deklarationer och definitioner Definitionen av varje funktion får bara finnas på ett ställe Deklarationen behövs överallt där funktionen används #include Minimalt exempel: medelv ett bibliotek för att beräkna medelvärde medelv.h medelv.cpp Användning: main.cpp medelv.h: deklarationer double medelv ( double x1, double x2 ); double medelv ( int x1, int x2 ); Presentation av C++ : 1. Introduktion 19/40 Presentation av C++ : 1. Introduktion 20/40 Exempel: Källfil Exempel: Huvudprogram medelv.cpp: definitioner # include " medelv.h" // gör deklarationerna synliga // så att kompilatorn kan kontrollera dem double medelv ( double x1, double x2) double medelv ( int x1, int x2) return static_cast < double >( x1 + x2) / 2; main.cpp: användning using std :: cout ; using std :: endl ; # include " medelv.h" // gör deklarationer synliga // för att kunna använda dem double a =2.3; double b =3.9; int m=3; int n=4; cout << medelv (a, b) << endl ; cout << medelv (m, n) << endl ; Presentation av C++ : 1. Introduktion 21/40 Presentation av C++ : 1. Introduktion 22/40 Placering av funktionsdeklarationer i s.k. headerfiler (.h) Uppdelning av koden på flera källfiler (.cpp) Separatkompilering av varje källfil (.cpp) Länkning av program medelv.cpp medelv.h huvudprogram.cpp iostream Objektfil 1 Objektfil 2 double medelv(double, double) double medelv(int, int) int main() Länkning Objektfiler från standardblioteket.exe-fil Presentation av C++ : 1. Introduktion 23/40 Anrop Vid funktionsanrop kopieras värdena för argumenten Typkontroll Implicit typomvandling Exempel: med en funktion double square(double) double s2 = square (2); // 2 konverteras till double double s3 = square (" three "); // fel Overloading ( överlagring ) Får inte skilja enbart i returtyp void print (int ); void print ( double ); void print (std :: string ); Måste vara entydigt void user () print (42); // anropar print (int ); print (1.23); // anropar print ( double ); print (4.5f); // anropar print ( double ); print ("Hej") // anropar print (std :: string ); Presentation av C++ : 1. Introduktion 24/40

Anrop - entydighet Tumregel Vid funktionsöverlagring väljer kompilatorn den bästa funktionen (efter implicit typkonvertering) Om två alternativ är lika bra fås ett kompileringsfel void print2 (int, double ); void print2 ( double, int ); void user () print2 (0, 0); // Fel! inte entydigt och även (med print() från förra bilden) En funktion ska bara ha en uppgift Håll funktioner korta, om möjligt Tumregel Max 24 rader Max 80 tecken per rad Max 3 indenteringsnivåer Max 5 10 lokala variabler Omvänt proportionellt mot komplexitet long l = 17; print (l); // Fel! print (int ) eller print ( double )? Presentation av C++ : 1. Introduktion 25/40 Presentation av C++ : 1. Introduktion 26/40 Värdeanrop och referensanrop Värdeanrop (call by value) Vid vanliga anrop kopieras alltid värdena från de aktuella parametrarna till de formella (vilka fungerar som lokala variabler) Exempel: Byta plats på två heltalsvärden void swap (int a, int b) int tmp =a; a = b; b = tmp ;... och anv ä ndning : int x = 2; int y = 10;... swap (x, y); Innehållet i x och y ändras inte Värdeanrop och referensanrop Referensanrop (call by reference) Istället för värdeanrop används referensanrop: Exempel: Byta plats på två heltalsvärden void swap (int & a, int & b) int tmp=a; a = b; b = tmp; NB! Värdet på en referens-parameter måste vara ett lvalue Anropet swap(x,15); ger felmeddelandet invalid initialization of non - const reference of type int& from an rvalue of type int Presentation av C++ : 1. Introduktion 27/40 Presentation av C++ : 1. Introduktion 28/40 Referenser Datatyper och variabler En referens är ett alias till en variabel Varje namn och varje uttryck (expression) har en typ 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 Presentation av C++ : 1. Introduktion 29/40 Presentation av C++ : Datatyper och variabler 1. Introduktion 30/40

Datatyper Primitiva typer Heltalstyper: char, short, int, long, long long signed (som i Java ) unsigned (modulo 2 N icke-negativa tal, finns inte i Java) Flyttalstyper: float, double, long double bool (boolean i Java) Typen char är den naturliga storleken för ett tecken på en given maskin (oftast 8 bitar). Storleken kallas (i C/C++) en byte oavsett antal bitar. sizeof(char) 1 Alla andra datatypers storlek är multipler av sizeof(char). Storlekar är implementation defined sizeof(int) är ofta 4. Operatorer Operatorer och uttryck liknar Java Gemensamma med Java T ex + - * / % ++ -- += -= *= && & etc. samt [].?: Trinära villkorsoperatorn?:(som i Java) z = (x>y)? x : y; if (x>y) z=x; else z=y; Många fler, t ex Pekaroperatorer: * & -> In- och utmatning: << >> sizeof, decltype Presentation av C++ : Datatyper och variabler 1. Introduktion 31/40 Presentation av C++ : Datatyper och variabler 1. Introduktion 32/40 Variabler Deklaration och initiering Deklaration utan initiering (undvik) int x; // x har odefinierat vä rde // ( jfr lokal variabel i Java ) Deklaration och initiering int x 7; // 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; // x == 7. Ger ingen varning int y 7.8; // ger varning (eller fel med -pedantic - errors ) Presentation av C++ : Datatyper och variabler 1. Introduktion 33/40 Variabler Automatisk typinferens auto: Man behöver inte ange typen på en variabel om den kan härledas från initieringen. Deklaration och initiering auto x = 7; // int x auto c = c ; // char c auto b = true ; // bool b auto d = 7.8; // 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 34/40 Datatyper Pekare, Arrayer och Referenser Datatyper Användardefinierade typer Referenser (konstanta och kan inte vara null ) 1 Pekare addressen till ett objekt heltalstyp, aritmetik, till skillnad från i Java Arrayer ( vektorer ). Liknar Java, fast Osäkra En array vet inte hur stor den är. En array kan ha godtycklig typ som element inte bara primitiva typer eller referenser som i Java C-strängar är char[] som är null-terminerade. Exempel: char s[6] = "Hello"; (Mer om detta senare) s: H e l l o \0 struct, class (som class i Java) Exempel från standardbiblioteket std::string (liknar java.lang.string) std::vector, std::list... (liknar motsvarande i java.util) enum class: uppräkningstyp (liknar enum i Java) 1 Egentligen inte en typ, utan ett alias till ett objekt Presentation av C++ : Datatyper och variabler 1. Introduktion 35/40 Presentation av C++ : Datatyper och variabler 1. Introduktion 36/40

Typdeklarationer med typedef och using typedef typedef unsigned long ulong ; typedef std :: vector <int > IntVector ; using (C++ 11) using ulong = unsigned long ; using IntVector = std :: vector <int >; Användning Följande deklarationer är ekvivalenta: ulong a [12]; IntVector vec ; unsigned long a [12]; std :: vector <int > vec ; Vi har talat om Kursen C++ historik funktioner datatyper och variabler deklarationer och definitioner jämförelser med Java och C Nästa föreläsning: User-defined types klasser uppräkningstyper operatorer Introduktion till I/O Presentation av C++ : Datatyper och variabler 1. Introduktion 37/40 Sammanfattning 1. Introduktion 38/40 Läsanvisningar Referenser till relaterade avsnitt i Lippman 6.1 (s 201 207) Typer, variabler 2.1,2.2,2.5.2 (s 31 37, 41 47, 69) Typalias 2.5.1 Aritmetik 4.1-4.5, 4.11 Pekare och Referenser 2.3 (s 50 59) Arrayer 3.5 3.5.2 (s 113 116) Sammanfattning 1. Introduktion 39/40