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

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

C++-programmets beståndsdelar

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

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

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

allokeras på stacken dynamiskt new delete

Det finns många flaggor till g++,

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

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

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

Enkla datatyper minne

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

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

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

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

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

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

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

Innehåll. Pekare Exempel

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

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

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

Innehåll. Pekare Exempel

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

Programsystemkonstruktion med C++

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

Kapitel 6 - Undantag

Parameteröverföring. Exempel. Exempel. Metodkropp

Introduktion C-programmering

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

SP:PROG3 HT12 Tenta

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Kapitel 5. Strömmar. Utmatning

Programmering A. Johan Eliasson

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

Att använda pekare i. C-kod

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

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

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

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

SMD 134 Objektorienterad programmering

Repetition C-programmering

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

TDIU01 - Programmering i C++, grundkurs

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

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

Programmeringsteknik med C och Matlab

Pekare och arrayer. Indexering och avreferering

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering B med Visual C

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Föreläsning 3-4 Innehåll

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Synlighet. Namespace Scope-operatorn Klasser Vänner

C++ - En introduktion

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Grundläggande programmering med C# 7,5 högskolepoäng

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

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

TDIU01 Programmering i C++

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

(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

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

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

Poster ( structar ) Postdeklarationer

TDIU01 - Programmering i C++, grundkurs

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

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

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

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

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

1 Namnkontroll (NameControl)

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

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

F5: Högnivåprogrammering

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

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

F5: Högnivåprogrammering

Dynamisk bindning och polymorfism

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

Transkript:

Kapitel 1 Grunderna i C++ Kapitel 1 grunderna i C++ C++-programmets beståndsdelar Datatyper Funktioner och funktionsanrop Sammansatta datatyper Pekare, aritmetik och referenser Minneshantering, preprocessorn 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 2 C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet C++-programmets beståndsdelar Ett första litet C++-program #include <iostream> // behövs för utskrifter int main() // main är obligatorisk i C++ // utskrift av "Hello world!" och radbrytning std::cout << "Hello world!" << std::endl; return 0; // avsluta programmet med värde 0 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 3 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 4 2D1387 Programsystemkonstruktion med C++ 1

Byggstenar Inbyggda datatyper Funktionsanrop, argument och returvärden Styrstrukturer Grundläggande datatyper I C++ finns många inbyggda datatyper. De flesta av dem representerar heltal: bool sanningsvärde, true ellerfalse char oftast 8 bitar (ettor och nollor). Används ofta för att lagra bokstäver short oftast 16 bitar int oftast 32 bitar, datorns ordstorlek long int större eller lika med int 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 6 Grundläggande datatyper Övriga datatyper representerar flyttal... float flyttal, 16 bitar double flyttal med dubbel precision, dvs 32 bitar long double 64 bitars flyttal...och minnesplatser: Pekare Håller adressen till valfri datatyp, oftast 32 bitar (för att adressera datorns hela minne), även funktioner Exempel på datatyper bool b = true; // sanningsvariabel int i = 85; // i tilldelas värdet 85 int j = i; // j blir 85 char a = 'x'; // a blir 120 = asciivärdet för 'x' float f = 3.1; // flyttal double d = 3.141593; // dubbel precision signed int k = 17; // heltal med tecken (default) unsigned char c = 4; // positivt heltal int *q = &i; int *p = 0; // pekare till ett heltal // pekare till null 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 7 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 8 2D1387 Programsystemkonstruktion med C++ 2

Funktioner och funktionsanrop För att dela upp sitt program i logiska delar använder man funktioner All kod i C++ ligger i funktioner Vid anrop till funktionen skickar man med argument Alla anrop i C++ är värdeanrop (call by value) där argumentens värden kopieras (jämför call by name). Tillbaka får man ett returvärde Funktioner och funktionsanrop En funktion bör ha en deklaration En funktion som används har precis en definition double maximum(double, double); // deklaration int main() double d = maximum(1.7, 3.2); // anrop std::cout << "d = " << d << std::endl; // 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++ Johnny Bigert 2002 9 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 10 Funktioners egenskaper Funktioner kan ta ett förvalt argument (eng. 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 Funktioners egenskaper int f(char c, int i = 7); // ett förvalt argument f('a'); // anrop med förvalt arg = 7 f('a', 3); // anrop med annat arg = 3 int g(int); int g(double); int g(a); int h(double d); inline int h(double d) return d; double x = h(3.14); double y = 3.14; // g tar int // överlagring // överlagring // deklaration // inlinedefinition // anrop till inlinefunktion // anrop ersatt mha inline 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 11 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 12 2D1387 Programsystemkonstruktion med C++ 3

Styrstrukturer Styrstrukturer if else for while do while switch case Översikt: int i = 7; if(i) else // if-else i = a > b? a : b; // villkorsoperatorn for(i = 0; i < 17; i++) // loop med for while(i) // loop med while do while(i); // loop med do-while switch(i) case 1: f(); break; case 2: g(); break; default: h(); break; // switch-case 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 14 Styrstrukturer if else Styrstrukturer for void *p = ptr(); if(p) else if(!p) do_this(); // returnerar nollskild pekare // sant, om p är nollskild // detta block utförs // detta block utförs inte // falsk ty!p är noll for(int i = 0; i < 10; i++) // i är synlig här // i är inte synlig här // 10 varv const int size = 100; int j; for(j = 0; j < size; j++) // 100 varv std::cout << "varv " << j << std::endl; 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 15 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 16 2D1387 Programsystemkonstruktion med C++ 4

Styrstrukturer while Styrstrukturer do while int i = 0; while(i < 100) // 100 varv std::cout << "varv " << i << std::endl; i++; bool done = false; do done = do_something(); /*... */ while(!done); 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 17 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 18 Styrstrukturer switchcase // skriv ut meny std::cout << "1. Öppna" << std::endl; std::cout << "2. Spara" << std::endl; std::cout << "3. Avsluta" << std::endl; // hämta tal från tangentbordet int value; std::cin >> value; switch(value) case 1: open(); break; case 2: save(); break; case 3: quit(); break; default: std::cout << "ogiltig inmatning" << std::endl; Sammansatta datatyper Vektorer Strukturer Klasser Unioner 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 19 2D1387 Programsystemkonstruktion med C++ 5

Sammansatta datatyper Man kan skapa vektorer av en given datatyp 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'; // '\0' har värdet 0 char t[4] = "bar"; // "bar" är en sträng char s[] = "bar"; // s har 4 element pga '\0' Förklaring av strängar 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 21 Sammansatta datatyper Det finns inga inbyggda strängar i C/C++ (C++:s standardbibliotek innehåller dock en strängklass, std::string) Strängar i C/C++ representeras av en vektor av char, avslutad med bokstaven \0 (nolla) som har värdet noll och kallas NUL. Vill man använda en sträng läser man vektorn tills man stöter på bokstaven \0. 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 22 Indexoperatorn Åtkomst i vektorer sker genom att använda []-operatorn. Elementen i en vektor är indexerade från noll. int c[2] = 7, 8; std::cout << "c[0] = " << c[0] << std::endl; // c[0] är 7 std::cout << "c[1] = " << c[1] << std::endl; // c[1] är 8 c[0] = 5; // c[0] är 5 // exempel på läsning av en sträng char str[4] = "foo"; int i = 0; while(str[i]!= '\0') // loopa tills str är slut std::cout << str[i]; // skriv ut värdet i++; // öka värdet på i class - en kort introduktion För att kapsla in data tillsammans med funktioner använder man datatypen class Åtkomsttypen avgör vem som kan se in i instanser av klassen. class Foo int i; public: int j; // åtkomst private är default // alla kommer åt j int fnc(double d) // funktion fnc som tar double och // lägger till ett return d + 1; private: int k; // endast medlemsfunktioner når k ; 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 23 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 24 2D1387 Programsystemkonstruktion med C++ 6

Struct - en variant avclass Den enda skillnaden mellan class och struct är att åtkomsttypen är private i class och public istruct. Unioner Det händer att man har behov av en typ som kan hålla olika sorters data i sig och man använder då union. Storleken på den sammansatta typen blir storleken av den största datatypen. struct Bar int i; long j; ; Bar a = 7, 4711; // lista av initierare Bar b; // medlemmarna oinitierade b.i = 7; // tilldelning b.j = 4711; union Baz int i; // sizeof b.i == 4 long l; // sizeof b.l == 4 double d; // sizeof b.d == 8 int a[7]; // sizeof b.a == 28 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++ Johnny Bigert 2002 25 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 26 Uppräkningar Typen enum gör uppräkninar mer läsbara Uppräkningar Utdata blir enum weekday Mon, Tue, Wed, Thu, Fri, Sat, Sun, count; enum wingdings foo = 11, bar = 3, baz; weekday today = Mon; std::cout << "Today is day number " << today + 1 << std::endl; std::cout << "There are " << count << " days of the week" << std::endl; std::cout << "bar = " << bar << ", " << "baz = " << baz << std::endl; Today is day number 1 There are 7 days of the week bar = 3, baz = 4 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 27 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 28 2D1387 Programsystemkonstruktion med C++ 7

Pekare, minne och referenser Pekararitmetik Vektorer Referenser Ekvivalens Statiskt och globalt minne Dynamiskt minne Pekare En pekare är en adress till en plats i minnet Alla variabler och funktioner i ett program har en adress och kan pekas på Pekare ger upphov till många fel, och dessa kan vara svåra att finna int i = 7; // i är 7 int *ip = 0; // pekare till en int ip = &i; *ip = 8; // ip innehåller adressen till i // avreferera pekaren och tilldela // i är nu 8 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 30 Pekare Ytterligare exempel på pekare Pekare Exempel på när det kan gå fel med pekare 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' char *s = name(); std::cout << "my name is " << s // skriver ut skräp << std::endl; char *name() char *str = "alice"; // fel: lokalt minne är return s; // ogiltig då funktionen returnerat 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 31 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 32 2D1387 Programsystemkonstruktion med C++ 8

Pekare, vektorer och minne En vektor konverteras till en pekare vid användning Man kan addera en pekare med ett heltal, s.k. pekararitmetik Man kan subtrahera pekare (avstånd) men inte addera Pekare, vektorer och minne Exempel på hur pekare och vektorer opererar på datorns minne 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 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 33 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 34 Pekare, vektorer och minne Objekt tar upp olika storlek i minnet. Pekararitmetik använder storleken för att bestämma avstånd mellan pekare int a[] = 0, 1, 2, 3, 4; int j; j = sizeof a[2]; // j är 4 j = sizeof(int); // j är 4 j = sizeof a; // j är 20 int *p = a + 1; // stegar 1 vektorposition = 4 bytes Minneshantering Lokala objekt allokeras på stacken och har kort livslängd Objekt med längre livslängd måste allokeras dynamiskt på heapen (free store) Dynamisk allokering görs med new och delete Statiska och globala objekt finns under programmets hela körtid 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 35 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 36 2D1387 Programsystemkonstruktion med C++ 9

Minneshantering Minne (objekt) som allokerats med new ska deallokeras med delete Minne (vektorer av objekt) som allokerats med new[] ska deallokeras med delete[] 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: odefinierat beteende! delete [] aa; // ok: destruktor för 5 element /* vid funktionens slut frigörs a automatiskt */ Minneshantering C++ har ingen automatrisk minneshantering (garbage collection) Alla dynamiska objekt som inte lämnas tillbaka läcker minne Speciellt viktigt är det att hålla ordning på minnet i objekt som skapas och destrueras ofta som t.ex. strängar. 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 37 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 38 Undvik vanliga problem Undvik dynamisk minneshantering! Det är lätt att läcka minne Finns nästan alltid lättare sätt Skapa istället objekt på stacken Använd std::vector vid arrayer! int *p = new int[10]; std::vector<int> v; Undvik vanliga problem Undvik pekare! Det är lätt att referera otillåtet minne (t.ex. genom att avreferera NULL) Det är lätt att referera ogiltigt minne (redan frigjort med delete) Skapa istället objekt på stacken Använd referenser! Dessa är garanterade att alltid referera ett giltigt objekt 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 39 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 40 2D1387 Programsystemkonstruktion med C++ 10

Referenser Referenser är ett sätt att undvika syntaxen hos pekare En referens refererar alltid till ett objekt eller en variabel Det finns alltså ingen motsvarighet till NULL för referenser Objekt och referenser är syntaktiskt ekvivalenta Referenser Exempel på hur referenser och pekare används som alias för ett objekt class A public: int i; ; A a; A &arf; A &ar = a; int i; i = a.i; i = ar.i; // objekt // fel: arf måste initieras // ok: ar refererar a // vi kommer åt a.i genom a // ar används istället för a void foo(const A &); // deklaration foo(a); // skicka a som referens 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 41 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 42 Statiska variabler i funktioner Statiska objekt allokerar eget minne Värdet på objekten behålls och ändras inte mellan anropen Minne allokeras och konstruktor körs vid första användningen, inte tidigare Statiska variabler i funktioner Statiska variabler behåller sitt värde mellan funktionsanropen void foo() static bool initialized = false; if (!initialized) /* do initialization */... 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 43 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 44 2D1387 Programsystemkonstruktion med C++ 11

Byggstenar Typdefinitioner Styrstrukturer Operatorer Preprocessorn Typer och typdefinitioner Definitioner 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 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); int *api[5]; int (*pai)[5]; // x är en vektor av 7 char // f pekar till funktionen ipart // f anropar funktionen ipart // vektor av pekare till int // pekare till vektor av int 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 46 Operatorer Operatorerna i C++ har olika prioritetsordning (precedence) och associativitet: Funktionsanrop m.m. () [] :: ->. ->*.* Unära operatorer! ~ ++ -- + - * & Aritmetiska operatorer + - * / % Jämförelseoperatorer < <= >= > ==!= Bitvisa operatorer & ^ ~ << >> Logiska operatorer && Villkorsoperatorn?: Tilldelning += -= &= ~= <<= etc. Kommaoperatorn, Preprocessorn Körs innan programmet ses av kompilatorn Används för att inkludera/exkludera källkod Kan användas för att definiera konstanter och makron C++ har många tekniker för att undvika preprocessorn, såsom inline, template och const 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 47 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 48 2D1387 Programsystemkonstruktion med C++ 12

Preprocessorn Preprocessorn Exempel på konstanter och makron: #include <iostream> // inkluderar filen iostream #include "myfile.h" // letar i lokal katalog först #ifdef MSDOS #include <conio.h> #endif // inkludera endast om MSDOS-miljö #ifndef MYFILE_H #define MYFILE_H // kontrollera så att filen // inte inkluderas 2 ggr #define PI 3.14159265 // konstant #define max(x, y) ((x) > (y)? (x) : (y)) // makro #if 0 // kompileras inte std::cout << "You won't see this one" << std::endl; #endif #endif // matchar #ifndef MYFILE_H 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 49 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002 50 2D1387 Programsystemkonstruktion med C++ 13