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

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

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

C++-programmets beståndsdelar

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Det finns många flaggor till g++,

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

TDIU01 - Programmering i C++, grundkurs

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

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

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

TDIU01 - Programmering i C++, grundkurs

allokeras på stacken dynamiskt new delete

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

Tommy Färnqvist, IDA, Linköpings universitet

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

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

Innehåll. Pekare Exempel

Programmering A. Johan Eliasson

Parameteröverföring. Exempel. Exempel. Metodkropp

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

TDIU01 Programmering i C++

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

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Innehåll. Pekare Exempel

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Första exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

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

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

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

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

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

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

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

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

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Objektorienterad Programmering (TDDC77)

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

Programmering B med Visual C

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

Föreläsning 3-4 Innehåll

Programsystemkonstruktion med C++

TDDC76 - Programmering och Datastrukturer

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

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

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

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

Tillämpad programmering

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Enkla datatyper minne

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Imperativ programmering. Föreläsning 2

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

F4. programmeringsteknik och Matlab

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.

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

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

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

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

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

TDIU01 - Programmering i C++, grundkurs

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Introduktion C-programmering

Funktionens deklaration

TDDC76 - Programmering och Datastrukturer

Programmeringsteknik med C och Matlab

(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

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Repetition C-programmering

C++ - En introduktion

Pekare och arrayer. Indexering och avreferering

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

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

Objektorienterad programmering

int (*fp) (char, char*) //pekare till funktion som tar //argumenten (char, char*) och //returnerar int

Att använda pekare i. C-kod

C++ - En introduktion

Föreläsning 3: Booleans, if, switch

TDDC76 - Programmering och Datastrukturer

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

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

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

TDIU01 - Programmering i C++, grundkurs

Dynamisk bindning och polymorfism

Introduktion till arv

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

Transkript:

2D1387, Programsystemkonstruktion med C++ 00/01 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursens hemsida: http://www.nada.kth.se/kurser/kth/2d1387 Varför vill man lära sig C++? Objektorienterat Slide 2 Tunt lager ovanpå C, vilket gör att det är Snabbt C++-programmerare eftertraktade i näringslivet Använt och testat sedan 1984, många verktyg

2D1387, Programsystemkonstruktion med C++ 00/01 2 Kursen i stort Visar hela språket Mycket att lära på kort tid ger mycket labbtid och självstudier Slide 3 Sju föreläsningar på totalt 14 timmar Tre omfattande labbar på totalt 26 timmar Tre övningstillfällen på totalt 6 timmar Nada ger inte rena språkkurser; C++ är ett undantag eftersom det är så mycket mer än bara språkde nitionen. Examination För att examineras krävs att man godkänt redovisar tre datorlaborationer. Man skall dessutom skriva en tentamen. Varje labb ger tre bonuspoäng till tentan om de redovisas i tid. Slide 4 Labb 1 - Grundläggande C++ Senast redovisad på labbtillfället onsdagen 15 nov (v.46) Labb2-Kalender Senast redovisad på labbtillfället onsdagen 29 nov (v.48) Labb3-Äventyrsspel Senast redovisad på labbtillfället onsdagen 13 dec (v.50) Tentamen Onsdagen 20 dec (v.51) klockan 14.00 i V01, 11 och 21.

2D1387, Programsystemkonstruktion med C++ 00/01 3 Del1 grundläggande C++ Ämnesområden denna föreläsning: Datatyper Slide 5 Funktioner och funktionsanrop Sammansatta datatyper Pekare, aritmetik och referenser Minneshantering, preprocessorn Kort historik Bjarne Stroustrup skapade C with Classes 1980. År 1983 användes det för första gången av en extern forskargrupp. Slide 6 Namnet kommer från C och ++-operatorn och betyder att C++ är en (ut)ökning och förbättring av C. BCPL C Algol 68 Simula 67 syntax C++ klasskonceptet

2D1387, Programsystemkonstruktion med C++ 00/01 4 Datatyper I programspråket C++ nns följande grundläggande datatyper: bool sanningsvärde, true eller false char heltal, 8 bitar. Används ofta för att lagra bokstäver Slide 7 int heltal, oftast 32 bitar long heltal, större eller lika med int float yttal double yttal med dubbel precision pekare håller adressen till en av ovanstående typer eller annan, mer komplicerad typ. Exempel på användning av datatyper Slide 8 bool b = true; // sanningsvariabel int i = 85; // i tilldelas värdet 85 int j = i; // j blir 85 char a = 'x'; // a blir 120, dvs asciivärdet för 'x' float f = 3.1; // flyttal double d = 3.141593; // dubbel precision

2D1387, Programsystemkonstruktion med C++ 00/01 5 Funktioner och funktionsanrop För att dela upp sitt program i logiska delar använder man funktioner Slide 9 Vid anropet till funktionen skickar man med argument Alla anrop är värdeanrop (call by value) vilket innebär att det är kopior av argumenten som används under körningen av funktionen. Undantag: referenser och vektorer. Tillbaka får man ett returvärde En funktion bör ha en deklaration. En funktion som används har precis en de nition. Slide 10 double maximum(double, double); // deklaration int main() { double d = maximum(1.7, 3.2); // anrop cout << "d = " << d << endl; // mata ut d = 3.2 return 0; } double maximum(double d1, double d2) { // definition if(d1 > d2) return d1; // returvärde else return d2; // returvärde }

2D1387, Programsystemkonstruktion med C++ 00/01 6 Funktioners egenskaper i C++ Funktioner kan ta ett förvalt argument (default argument) Funktioner med samma namn och olika argument kallas överlagringar Funktioner kan deklareras inline, vilket är ett förslag till kompilatorn att ersätta funktionsanropet med programkod Slide 11 int f(char c, int i = 7); int g(int); int g(double); int g(a); // ett förvalt argument // g tar int // överlagring // överlagring int h(double d); inline int h(double d) { return d; } // deklaration // inlinedefinition Uppräkningar Typen enum gör uppräkningar mer läsbara: Slide 12 enum weekday {Mon, Tue, Wed, Thu, Fri, Sat, Sun, daycount}; enum wingdings {foo = 11, bar = 3, baz}; weekday today = Mon; cout << "Today is day number " << today + 1 << endl; cout << "There are " << daycount << " days of the week" << endl; cout << "bar = " << bar << ", " << "baz = " << baz << endl;

2D1387, Programsystemkonstruktion med C++ 00/01 7 Utdata blir Slide 13 Today is day number 1 There are 7 days of the week bar = 3, baz = 4 Sammansatta datatyper Man kan skapa vektorer av en given datatyp. Slide 14 int a[7]; // alla element oinitierade int b[] = {1, 2, 3}; // b har 3 element int c[2] = {7, 8}; char r[] = {'b', 'a', 'r', '\0'}; char s[] = "bar"; // s har 4 element pga '\0' char t[4] = "bar";

2D1387, Programsystemkonstruktion med C++ 00/01 8 Indexoperatorn Åtkomst i vektorer sker genom att använda []-operatorn. Elementen i en vektor är indexerade från noll. Slide 15 int c[2] = {7, 8}; cout << "c[0] = " << c[0] << endl; // c[0] är 7 cout << "c[1] = " << c[1] << endl; // c[1] är 8 c[0] = 5; // c[0] blir 5 Klasser För att kapsla in data med funktioner använder man datatypen class precis som i Java. Åtkomsttypen avgör vem som kan se in i instanser av klassen. Slide 16 class Foo { int i; // åtkomst private är default public: int j; // alla kommer åt j int fnk(double d) // publik funktion som tar double { return d; } //...och returnerar heltalsdelen private: int k; // endast medlemsfunktioner når k };

2D1387, Programsystemkonstruktion med C++ 00/01 9 struct envariantavclass Den enda skillnaden mellan class och struct är att åtkomsttypen är private i class medan den är public i struct. Slide 17 struct Bar { int i; long j; }; Bar a = {7, 4711}; // lista av initierare Bar b; // medlemarna oinitierade b.i = 7; // explicit initiering b.j = 4711; Union Det händer att man har behov av en typ som kan hålla olika sorters data i sig, man använder då union. Storleken på den sammansatta typen blir storleken av den största datatypen. Slide 18 union Baz { int i; long l; double d; int a[7]; } b; // skapa objekt b av typ union Baz b.a[3] = 5; // tilldela en medlem b.i = 7; // skriv över och tilldela annan medlem

2D1387, Programsystemkonstruktion med C++ 00/01 10 Pekare En pekare är en adress till en plats i minnet Man kan peka till alla typer av data i ett program har en plats i minnet Slide 19 Pekare ger upphov till många fel, och dessa kan vara svåra att nna int i = 7; // i är 7 int *ip; // pekare till en int ip = &i; *ip = 8; // ip innehåller adressen till i // avreferera pekaren och tilldela // i är nu 8 Ytterligare ett exempel på pekare Slide 20 char c; char *s = "foobar"; char *t; c = s[3]; t = s; t = &s[0]; t = &s[4]; // c är nu 'b' // t pekar på 'f' // t pekar på 'f' // t pekar på 'a'

2D1387, Programsystemkonstruktion med C++ 00/01 11 Ett exempel på när det går fel med pekare int *i = int_pointer(); cout << "i = " << *i << endl; // skriver ut ett skräptal Slide 21 int *int_pointer() { int i = 7; return &i; } // fel: lokal variabel är inte längre // giltig då funktionen returnerat Pekare, vektorer och sizeof En vektor är ekvivalent med en pekare Man kan addera en pekare med ett heltal, s.k. pekararitmetik Man kan subtrahera pekare men inte addera Slide 22 int a[] = {0, 1, 2, 3, 4}; int *p; int j; p = a + 1; // p pekar på 1 j = a[2]; // j är 2 j = p[2]; // j är 3 *(a+1) = 5; // a är {0,5,2,3,4} j = sizeof a[2]; // j är 4 j = sizeof(int); // j är 4

2D1387, Programsystemkonstruktion med C++ 00/01 12 Referenser Referenser är ett sätt att undvika syntaxen hos pekare En referens refererar alltid till ett objekt eller en variabel Objekt och referenser är syntaktiskt ekvivalenta class A { public: int i; } a; Slide 23 A *ap; A &arf; A &ar = a; // ap är pekare till A // fel: arf måste referera objekt // ok: ar refererar a ap = &a; int i = ap->i; ap = &ar; i = ar.i; // ap är adressen till a // avreferera pekaren till a // ap är adressen till a // ar används istället för a Typer och typde nitioner De nitioner av typer kan vara svåra att förstå i C++ Man kan använda typedef för att döpa om en typ int ipart(double); // deklarera funktion Slide 24 typedef char str[7]; // str är en vektor av 7 char typedef int (*funct)(double); // funct är funktionspekare str x = "foo"; funct f = ipart; int i = f(3.14); // x är en vektor av 7 char // f pekar till funktionen ipart // f anropar funktionen ipart int *api[5]; int (*pai)[5]; // vektor av pekare till int // pekare till vektor av int

2D1387, Programsystemkonstruktion med C++ 00/01 13 Styrstrukturer Styrstrukturerna i C++ är desamma som i Java. int i = 7, j; Slide 25 if(i) {} else {} i = a > b? a : b; for(i = 0; i < 17; i++) {} while(i) {} do {} while(i); // if-else // villkorsoperatorn // loop med for // loop med while // loop med do-while switch(i) { case 1: f(); break; case 2: g(); break; default: h(); break; } // switch-case Operatorer Operatorerna är desamma som i Java (med några undantag) och har samma prioritetsordning (precedence) och associativitet: Slide 26 Funktionsanrop m.m. () [] :: ->. ->*.* Unära operatorer! ~ ++ -- + - * & Aritmetiska operatorer + - * / % Jämförelseoperatorer < <= >= > ==!= Bitvisa operatorer & ^ ~ << >> Logiska operatorer && Jämförelseoperatorn?: Tilldelning += -= &= ~= <<= etc. Kommaoperatorn,

2D1387, Programsystemkonstruktion med C++ 00/01 14 Minneshantering Lokala objekt allokerar eget minne på stacken Objekt som skall behållas måste allokeras dynamiskt på heapen Dynamisk allokering görs med new[] och delete[] Slide 27 void foo() { A a; // a allokerad på stacken A *ap = new A(); // dynamiskt allokerad A *aa = new A[5](); // vektor med 5 A-objekt delete ap; // frigör allokerat minne delete aa; // fel: destruktor för a[0] delete [] aa; // ok: destruktor för 5 element } /* vid funktionens slut frigörs a automatiskt */ Statiska objekt i funktioner Statiska objekt allokerar eget minne Värdet på objekten behålls och ändras inte mellan anropen Slide 28 void foo() { static bool initialized = false; if (!initialized) { /* do initialization */ }... }

2D1387, Programsystemkonstruktion med C++ 00/01 15 Preprocessorn Körs innan programmet ses av kompilatorn Används för att inkludera/exkludera källkod Slide 29 De nierar konstanter och makron #include <iostream> // inkluderar filen iostream #include "myfile.h" // letar i lokal katalog först #ifdef MSDOS #include <conio> #endif // inkludera endast om MSDOS-miljö Preprocessorn Exempel på konstanter och makron: #ifndef MYFILE_H #define MYFILE_H // kontrollera så att filen // inte inkluderas 2 ggr Slide 30 #define PI 3.14159265 // konstant #define max(x, y) ((x) > (y)? (x) : (y)) // makro #if 0 // kompileras inte cout << "You won't see this one" << endl; #endif #endif // matchar #ifndef MYFILE_H