C++ - En introduktion

Relevanta dokument
C++ - En introduktion

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

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

TDIU01 - Programmering i C++, grundkurs

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

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

TDDC76 - Programmering och Datastrukturer

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Funktionens deklaration

TDIU01 Programmering i C++

Introduktionslaboration

Introduktionslaboration

F4. programmeringsteknik och Matlab

TDDC76 - Programmering och Datastrukturer

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

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

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

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

Introduktion C-programmering

Objektorienterad Programmering (TDDC77)

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

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

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

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Repetition C-programmering

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

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

Programmeringsteknik med C och Matlab

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

C++ Lektion Tecken och teckenfält

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Avrundning och manipulatorer

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

C++ Objektorientering - Klasser. Eric Elfving

Programmering i C, 7,5 hp

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

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

C++ Slumptalsfunktioner + switch-satsen

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

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

SMD 134 Objektorienterad programmering

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

TDIU01 - Datortenta (DAT2)

Objektorienterad Programmering (TDDC77)

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

TDDC76 - Programmering och Datastrukturer

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.

Övning2. Variabler. Data typer

Enkla datatyper minne

Variabler och konstanter

Skizz till en enkel databas

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

1 Funktioner och procedurell abstraktion

Översikt över Visual Basic

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

Pascal... Pascal. Pascal... Pascal...

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Parameteröverföring. Exempel. Exempel. Metodkropp

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Data, typ, selektion, iteration

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

Användarhandledning Version 1.2

C++-programmets beståndsdelar

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

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

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

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

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

6.1 Kompilering och lite grundläggande information

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Det finns många flaggor till g++,

Planering Programmering grundkurs HI1024 HT 2014

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 2 Programmeringsteknik och C DD1316

TDP002 - Imperativ programmering

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

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

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Transkript:

C++ - En introduktion De imperativa grunderna för dig som kan programmera Eric Elfving Institutionen för datavetenskap

1 / 77 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

3 / 77 Ett första C++-program 1 #include <iostream > 2 using namespace std; 3 4 int main() 5 6 cout << "Ett litet C++-program" << endl; 7 return 0; 8

4 / 77 Ett första C++-program #include <iostream > using namespace std; hello.cc int main() cout << "Ett litet C++-program" << endl; return 0; lit15-1 <203> g++ hello.cc lit15-1 <204>./a.out Ett litet C++-program lit15-1 <205>

5 / 77 Variabler Har alltid tre egenskaper Namn Datatyp Värde Måste deklareras innan de används Kan ses som en " låda" i datorns internminne int val; int y 4; val:.?. int

6 / 77 Datatyper Bestämmer vad vi kan göra med variabeln och vad (vilka värden) som kan lagras i den Vi använder ofta följande datatyper : int Lagrar ett heltal double Lagrar flyttal, en representation av de reella talen char Lagrar ett tecken bool Sanningsvärden, true eller false string Lagrar text, en samling av tecken (char)

7 / 77 Ett kort C++-program #include <iostream > using namespace std; // Ett kort program för att visa C++ int main() int x,y5; const int z 6; y = 4; x = x*y; // En beräkning return 0; /* Kommentarer kan vara flera rader! */

8 / 77 Inläsning och utskrift - IO Formaterad inmatning Formaterad inläsning - ignorerar inledande "vita tecken"(mellanslag, tabbar, nyradstecken osv) och tolkar nästa ord beroende på datatypen på variabeln där datat ska lagras. int x; cout << "Mata in ett heltal: "; cin >> x;

9 / 77 Inläsning och utskrift - IO Formaterad inmatning Inläsning är buffrad!

10 / 77 Inläsning och utskrift - IO Formaterad utskrift Skaparna av språket väljer hur data formateras vid utskrift. Här kommer några saker man kan använda sig av för att ändra utseendet. '\n' Gå till nästa rad i utskriften '\r' Börja om på samma rad i utskriften flush Skriv ut allt i utmatningsbufferten endl flush följt av \n

11 / 77 Inläsning och utskrift - IO Instruktioner från <iomanip> fixed Använd decimalpunkt och N=6 decimaler setprecision(n) Använd N decimaler vid utskrift scientific Använd vetenskapliga formatet 1.234e+02 setw(n) Använd minst N tecken för nästa utskrift setfill(c) Använd tecknet C som utfyllnadstecken left Vänsterjustera utskriften right Högerjustera utskriften

12 / 77 Inläsning och utskrift - IO Formaterad utskrift #include <iostream > #include <iomanip > using namespace std; int main() int i 10; double d 3.141592; cout << setw(6) << setfill('.') << i << endl; cout << setw(6) << fixed << setprecision(2) << d << endl; cout << setw(10) << left << "hej\n"; cout << setfill(' '); cout << setw(10) << right << "hej" << endl;...10..3.14 hej... hej

13 / 77 Inläsning och utskrift - IO Oformaterad inläsning Formaterad inläsning är bra men ibland vill man få veta exakt vad som matades in, då passar oformaterad inläsning bra. Antag att vi har dessa deklarationer: string str; char c; cin.get(c); getline(cin, str); getline(cin, str, ':'); cin.ignore(28, ':'); cin.peek(); Läs nästa tecken Läs nästa rad Läs en rad eller tills nästa kolon. Ignorera alla tecken tills tecknet ':' eller max 28 tecken. Tittar på nästa tecken.

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

15 / 77 Uttryck Uttryck beräknar värden i språket.

16 / 77 Litteraler Litteraler är värden som skrivs direkt i källkoden. Litteraler konverteras till inbyggda typer med regler givna i språket. Litteral Typ Värde 1 int 1 0x1b int 27 Exempel: 1.2 double 1.2 1.2e2 double 120.0 'c' char 'c' "c" const char[2] "c" "kalle"s string "kalle"

17 / 77 Operatorer Aritmetiska operatorer C++ har de vanligaste matematiska operatorerna inbyggt: +,-,*,/ utför normalt sett det man väntar sig... Beräkningsordning precis som i matematiken, kan ändras med parenteser. Det finns ett undantag från första punkten, heltalsdivision! a Matematiskt: b = c + d b C++: a/b = c a%b = d Två heltal (int) dividerade ger ett heltal (hur många gånger kan jag dela a med b?) Resten ges av modulo, i C++ används operatorn %.

18 / 77 Operatorer Sammansatt tilldelning Man kan modifiera en variabel med sammansatt tilldelning x += 3 ökar x med tre. Kan såklart även skrivas x = x + 3 Fungerar för alla aritmetiska operatorer (och några fler)

19 / 77 Operatorer Stegning En vanlig operation är att öka eller minska en variabel med värdet 1 Därför finns det operatorer för just detta: ++ och -- Finns i prefix- (++x) och postfix-versioner (x++) Båda ökar värdet med 1, varför finns det två?

20 / 77 Operatorer Prefix stegning Prefix stegning är den som används oftast Ökar värdet och resultatet är det nya värdet int x 1; cout << x << endl; cout << ++x << endl; cout << x << endl; 1 2 2

21 / 77 Operatorer Postfix stegning Ökar värdet och resultatet är det gamla värdet. x++ motsvarar följande beräkning, resultatet är tmp: int tmp x; x = x + 1; int x 1; cout << x << endl; cout << x++ << endl; cout << x << endl; 1 1 2

22 / 77 Operatorer Jämförelseoperatorer Man vill ofta jämföra värden, då använder man jämförelseoperatorer Operator Betydelse == Likhet!= Olikhet < Mindre än > Större än >= Större eller lika <= Mindre eller lika Alla ger logiska värden som svar (bool, true eller false)

23 / 77 Operatorer Logiska operatorer Med hjälp av logiska operatorer kan man slå ihop logiska uttryck Operator Betydelse && Logiskt OCH Logiskt ELLER! Logiskt ICKE Beräkningsordning:! > && > (> tolkas här som beräknas innan )

24 / 77 Strömoperatorer Det finns två strömoperatorer: << och >>. Utskriftsoperatorn << används för att skriva ut ett värde på en ström. Värdet kan vara konstant, till exempel en litteral. Inläsningoperatorn >> används för att hämta ett värde från en ström till en variabel. Vi har tagit upp två grundläggande strömmar, cin för inläsning och cout för utskrift. int x; cout << "Mata in ett tal: "; cin >> x;

25 / 77 Satser Ett C++-program består av satser som körs i en sekvens Ett programs satser körs alltid i den ordning de står i källkoden Satser består av uttryck Satser avslutas oftast med ett semikolon

26 / 77 Satser Uttryckssatsen Uttryckssatsen är den enklaste formen av sats. Uttryck följt av ett semikolon. x++; cout << x; 4;

27 / 77 Satser Deklarationer En variabel deklareras innan den kan användas. Ett namn får endast användas en gång i ett program. Vi får ett kompileringsfel om vi omdeklarerar en variabel. int x 3; int x 4; // Ger ett fel! x = 5; // korrekt double x 4.3; // Fel!

28 / 77 Satser Satsblock Man kan när man vill skapa ett nytt block för att gruppera satser som hör bra ihop. Görs med klammerparenteser (... ) Deklarationer som görs i ett block gäller endast där - blocket skapar ett eget område (scope) där variabler lever och dör. int x 3, y 5; int x 4; // EJ fel, x skapas lokalt! int z; cout << x << ' ' << y; // skriver ut "4 5" z = 6; // Fel, z finns inte här!

29 / 77 Satser Villkor if ( uttryck ) sats else sats if-satsen: om sant, gör följande uttryck ska vara eller gå att konvertera till ett sanningsvärde (bool) else: annars, gör detta else kan utelämnas

30 / 77 Satser Villkor if ( uttryck ) sats1; sats2;... Ibland räcker inte en sats i villkoret, då kan man använda block! Detta är det vanliga skrivsättet, använd alltid block för att slippa problem.

31 / 77 Satser Villkor if ( uttryck1 ) sats1 else if ( uttryck2 ) sats2 else sats3 Ibland vill man kontrollera flera villkor Byt ut else-grenens sats mot en ny if-sats! Väldigt vanlig operation - många språk har egna namn såsom elsif och elif Kan byggas på med valfritt antal else if

32 / 77 Satser Villkor. uttryck1 T sats1 if ( uttryck1 ) sats1 else if ( uttryck2 ) sats2 else sats3 F uttryck2 F T sats2 sats3

33 / 77 Satser Uppräkning switch ( uttryck ) case v1: sats1 case v2: sats2 default: sats3 switch-satsen är bra på att kontrollera värdet på ett (uppräkningsbart) uttryck Om ett värde hittas utförs alla satser nedanför detta. Det kallas att man faller igenom övriga villkor.

34 / 77 Satser Uppräkning. switch ( uttryck ) case v1: sats1 case v2: sats2 default: sats3 uttryck == v1 F uttryck == v2 F sats3 T T sats1 sats2

35 / 77 Satser Uppräkning switch ( uttryck ) case v1: case v2: sats1 break; case v3: sats2 break; default: sats3 För att utföra samma satser för flera värden har man flera case. Om man vill få switch-satsen att fungera mer som if, kan man använda sig av break.

36 / 77 Satser Uppräkning. switch ( uttryck ) case v1: case v2: sats1 break; case v3: sats2 break; default: sats3 uttryck == v1 uttryck == v2 F uttryck == v3 F sats3 T T sats1 sats2

37 / 77 Satser Upprepning Ofta vill man upprepa kod C++ har tre upprepningssatser; while do... while for

38 / 77 Satser Upprepning - while while ( uttryck ) satser while - den enklaste. Utför satser så länge uttryck är sant En förtestad upprepningssats

39 / 77 Satser Upprepning - while. while ( uttryck ) satser uttryck T satser F

40 / 77 Satser Upprepning - do-while do satser while ( uttryck ); do-while - en eftertestad while-loop. Utför satser minst en gång.

41 / 77 Satser Upprepning - do-while. do satser while ( uttryck ); satser uttryck T F

42 / 77 Satser Upprepning - for for ( init; cond; end ) satser for - En loop med inbyggd räknare. Utför init en gång, kör satser följt av end så länge cond är sant.

43 / 77 Satser Upprepning - for. init for ( init; cond; end ) satser end cond F T satser

44 / 77 Skriv ut talen 1..5 int i 1; while ( i <= 5 ) cout << i << endl; ++i; int i 1; do cout << i << endl; ++i; while ( i <= 5 ); for ( int i 1; i <= 5; ++i ) cout << i << endl;

45 / 77 Upprepning Vilken ska jag välja 1. Vet jag hur många gånger det ska upprepas for for(;;) för oändligt många gånger. 2. Ska jag utföra det minst en gång do-while 3. Annars Det som känns bäst... (ofta while)

46 / 77 Räkna antal vita tecken #include <iostream > #include <cctype > using namespace std; int main() char c; int space ; while ( cin.get(c) ) if ( isspace(c) ) ++space; cout << "Du matade in " << space << " vita tecken."

47 / 77 Räkna antal vita tecken med for #include <iostream > #include <cctype > using namespace std; int main() int space ; for (char c; cin.get(c); ) if ( isspace(c) ) ++space; cout << "Du matade in " << space << " vita tecken."

48 / 77 cctype I inkluderingsfilen <cctype> finns teckenhanteringsfunktioner Samtliga tar emot ett tecken och ger 0 som svar vid falskt, nollskilt vid sant. Endast garanterat att de fungerar som väntat för engelska tecken (ASCII) Namn Funktion isaplpha(c) c är ett alfabetiskt tecken isspace(c) c är ett vitt tecken isdigit(c) c är ett numeriskt tecken isupper(c) c är en versal islower(c) c är en gemen

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

50 / 77 Funktioner Ett kort exempel #include <iostream > using namespace std; void hello(); // deklaration int main() hello(); // Anrop cout << "------" << endl; hello(); void hello() // definition cout << "Hejsan" << endl; Hejsan ------ Hejsan

51 / 77 Parametrar Med hjälp av parametrar kan man skicka data till sin funktion void hello(string name) // deklaration + definition cout << "Hello " << name << '!' << endl; int main() hello("anna"); Hello Anna!

52 / 77 Parametrar Värdeöverföring Detta var exempel på värdeöverföring Värden kopieras vid överföring - en lokal kopia skapas i funktionen och kan användas som en lokal variabel Eventuella ändringar vi gör på parametern syns inte utifrån Kan också deklareras const för att förbjuda förändringar

53 / 77 Parametrar Värdeöverföring void hello(string name); main. string user: "Nisse" int main() string user "Nisse"; hello(user); hello name: string "Nisse"

54 / 77 Parametrar Referensparametrar Om vi vill kunna ändra på vår anropares variabler får vi ta emot parametrarna som referenser En referensparameter deklareras med & void append_word(string & a, string b) a += " " + b; int main() string s1 "Hejsan"; append_word(s1, "svejsan"); cout << s1 << endl; Hejsan svejsan

55 / 77 Parametrar Referensparametrar void append(string & a, string b); int main() string s1"a", s2"b"; append(s1, s2); main. string s1: "A" string s2: "B" append string& a: string b: "B"

56 / 77 Parametrar const-referenser Värdeöverföring leder till (ofta onödig) kopiering referensöverföring gör att vi kan råka ändra på anroparens variabler Dessutom kräver referenser att värdet går att ändra på (fungerar inte med konstanter eller litteraler) Därför kan man deklarera sin parameter som const-referens! Bra att ha vid överföring av stora variabler såsom strängar som man inte vill ändra på Kompilatorn ger fel om vi råkar ändra parametern

57 / 77 Parametrar const-referenser void hello(string const & name) cout << "Hello " << name << '!' << endl;

58 / 77 Parametrar Vilken ska jag välja? 1. Vill jag ändra på parametern? referens 2. Är det en inbyggd datatyp (int, double, char, bool)? 1. Vill jag kunna ändra på den lokalt? värdeöverföring 2. Annars const 3. Annars const-referens (blir vanligaste valet)

59 / 77 Parameteröverföring - sammanfattning Figur : Sammanfattning från C++ Core Guidelines

60 / 77 Defaultargument Om man vill kan man ange defaultvärden (skönsvärden) för sina parametrar void print_stars(int const n = 10) for ( int i ; i < n; ++i ) cout << '*'; cout << endl; int main() print_stars(20); print_stars(); ******************** **********

61 / 77 Defaultargument Parametrar med defaultargument måste anges i slutet av parameterlistan void fun(int a, int b=5, int c); g++ -c args.cc args.cc:1:6: error: default argument missing for parameter 3 of 'void fun(int, int, int)'

62 / 77 Defaultargument void fun(int a=1, int b=5, int c=4); Anrop a b c f() 1 5 4 f(2) 2 5 4 f(3,4) 3 4 4 f(3,4,6) 3 4 6

63 / 77 Returvärden Alla funktioner vi skapat hittills har haft returtypen void för att symbolisera avsaknad av returvärde. Alla funktioner kan returnera ett värde I C++ görs det med return: return expr; där expr är ett uttryck med samma datatyp som funktionens returtyp. Funktionen avslutas direkt när return nås. En funktion kan ha flera return-satser, all kod efter den första nås inte.

64 / 77 Returvärden int max(int const a, int const b) if ( a > b ) return a; return b; int main() int a,b; cout << "Mata in två tal: "; cin >> a >> b; int m max(a,b) ; cout << "Det största är " << m << endl; Mata in två tal: 2 6 Det största är 6

string concat(string const & s1, string const & s2) return s1+s2; 65 / 77

1 Grunderna Ett första program Variabler och datatyper I/O - Inläsning och utskrift 2 Uttryck och satser 3 Funktioner 4 Poster

67 / 77 Poster - struct struct Book string title; string author; int pages; ; int main() Book b; b.title = "C++ Primer"; b.author = "Lippman"; b.pages = 976; Man kan med hjälp av poster gruppera data som hör bra ihop till en datatyp. En post är ett exempel på en sammansatt datatyp. Posten har namngivna fält som man kommer åt med punktoperatorn.

68 / 77 Poster struct Book string title; string author; int pages; ; int main() Book b; b.title = "C++ Primer"; b.author = "Lippman"; b.pages = 976; b: Book string title:. "C++ Primer" string author: "Lippman" int pages: 976

69 / 77 Poster Initiering och tilldelning // Initiering, fälten fylls från vänster... Book primer "C++ Primer", "Lippman", 976; Book b2 "Professional C++"; // författare och antal sidor får ett // "nollvärde" (tom sträng resp. 0) b2 = primer; // Tilldelning, alla delar kopieras

70 / 77 Poster Poster och funktioner Precis som andra datatyper kan man skicka poster till funktioner. Vi har en komplicerad datatyp (const-)referens bör användas.

71 / 77 Poster Poster och funktioner int main() Book my_book; cout << "Mata in information om en bok" << endl; input(my_book); // Låt användaren mata in information cout << "Inmatat data:" << endl; print(my_book); // Skriv ut bokens information

72 / 77 Poster Poster och funktioner void print(book const & b) cout << "Titel: " << b.title << '\n' << "Författare: " << b.author << '\n' << "Antal sidor: " << b.pages << endl; void input(book & b) cout << "Titel: "; cin >> b.title; // getline? cout << "Författare: "; cin >> b.author; cout << "Antal sidor: "; cin >> b.pages;

73 / 77 Poster Hur organiserar man programkoden: Deklarations-filen Döp filen enligt postens namn med filändelse.h, tex book.h Definiera vad posten är uppbyggd av och postens namn. Deklarera alla funktioner som använder sig av posten. De bygger upp gränssnittet till posten. Det är allt vad man kan göra med objekt av posttypen. #ifndef BOOK_H // ta bara med innehållet en gång #define BOOK_H // trots flera inkluderingar // definition av post // deklarationer av funktioner som opererar på post #ifndef

74 / 77 Poster Hur organiserar man programkoden: Implementations-filen Döp filen enligt postens namn med filändelse.cc, tex book.cc Definiera (implementera) alla funktioner som använder sig av posten. Här bestäms hur funktionerna åstadkommer det de ska. Ingen annan bör känna till hur det går till eller hur posten är uppbyggd. #include "book.h" // ta med deklarationer // definitioner av funktioner som opererar på post

75 / 77 Poster Hur organiserar man programkoden: Använda posten Programdelar (tex main.cc) som vill använda posten inkluderar h-filen Kan skapa objekt (variabler) av posttypen Kan anropa funktioner som opererar på posten #include "book.h" // ta med deklarationer int main() // deklaration av postvariabler // anrop av funktioner som använder postvariabler

76 / 77 Poster Hur organiserar man programkoden: Kompilering Det går att kompilera på flera sätt. Det viktiga är att definitionen av main och alla funktioner som anropas kommer med i kompileringen. // Kompilera fil i taget g++ -c book.cc g++ -c main.cc // Länka båda objekt-filerna g++ book.o main.o // Kompilera och länka i ett st g++ book.cc main.cc // Kompilera om bara main.cc // Länka med befintlig book.o g++ book.o main.cc

77 / 77 Poster Definiera egna operatorer returtyp operator symbol (vänsteroperand, högeroperand); bool operator <(book const& a, book const& b) // anropar i sin tur operator < för string return a.author < b.author; ostream& operator <<(ostream& os, book const& b) return os << a.author;

Eric Elfving Institutionen för datavetenskap www.liu.se