Programmering i C++
Gyldendal-TISIP-serien – databøker på norsk!
Gyldendal Akademisk og Stiftelsen TISIP ved Høgskolen i Sør-Trøndelag har gått sammen om å utvikle en portefølje av databøker på norsk som er skreddersydde for pensummarkedet ved universitet og høgskoler. De passer også godt for selvstudium og etterutdanning.
Målet med bokserien er å utvikle litteratur som er fullt på høyden med den engelskspråklige, både faglig og pedagogisk. Bøkene skal alltid være faglig à jour og ha gode nettsider som er tilpasset behovene til studenter og forelesere.
Per Borgesen: Dynamiske websider, 1. utgave 2003
Marie Christensen og Louis Harder Fischer: Utvikling av multimedier, 1. utgave 2004
Mads E. Eilertsen og Arne B. Mikalsen: Linux tjenestedrift, 1. utgave 2003
Helge Hafting og Mildrid Ljosland: Algoritmer og datastrukturer, 1. utgave 2003
Kjell Toft Hansen og Tore Mallaug: Databaser, 1. utgave 2003
Tore Berg Hansen og Greta Hjertø: Kvalitet og programvareutvikling, 1. utgave 2003
Svend Andreas Horgen: Webprogrammering i PHP, 1. utgave 2004
Stig Jensen: Introduksjon til datakommunikasjon, 1. utgave 2002
Else Lervik og Vegard B. Havdal: Programmering i Java, 3. utgave 2004
Else Lervik og Mildrid Ljosland: Programmering i C++, 1. utgave 2003
Geir Maribu: Praktisk Linux, 1. utgave 2003
Programmering i C++
En innføring i strukturert og objektorientert programmering
© Forfatterne, Stiftelsen TISIP og Gyldendal Norsk Forlag AS 2003
1. utgave, 3. opplag 2009
Boka er en utvidet og bearbeidet versjon av tittelen Grunnleggende programmering i C++ som ble utgitt på AdNotam Gyldendal i 1993.
ISBN 978-82-05-30733-9
Omslagsdesign: Kristin Berg Johnsen
Layout: Designlaboratoriet
Sats: Forfatterne
Brødtekst: Times New Roman 11/11
Papir: 90 g One Matt
Trykk: Dimograf, Polen 2009
Boka er utgitt i samarbeid mellom
Gyldendal Akademisk og Stiftelsen TISIP
Alle henvendelser om boka kan rettes til Gyldendal Akademisk
Postboks 6730 St. Olavs plass 0130 Oslo
www.gyldendal.no/akademisk akademisk@gyldendal.no www.tisip.no
Verken forfatterne, Stiftelsen TISIP eller Gyldendal Akademisk tar ansvar for at programmene i boka og på bokas internettside kan brukes til annet enn undervisningsformål.
Det må ikke kopieres fra denne boka i strid med åndsverkloven eller avtaler om kopiering inngått med KOPINOR, interesseorgan for rettighetshavere til åndsverk. Kopiering i strid med lov eller avtale kan medføre erstatningsansvar og inndragning, og kan straffes med bøter eller fengsel.
Forord
Dette er ei lærebok i grunnleggende programmering, der C++ brukes som programmeringsspråk. Boka er tenkt brukt ved grunnkurs i programmering, fortrinnsvis på høgskolenivå, men også andre som ønsker en grunnleggende innføring i programmering, vil ha glede av boka.
Boka bygger på "Grunnleggende programmering i C++" og "Objektorientert programmering i C++" som kom ut i henholdsvis 1993 og 1994. Strukturen til boka følger i hovedtrekk den første av disse bøkene, men flere av emnene i den andre boka er tatt med. Ti år er lang tid i databransjen, men C++ er fortsatt et meget aktuelt programmeringsspråk. Vi har derfor valgt å lage en ny utgave med de endringene som var nødvendige for å tilpasse den til dagens virkelighet.
De vesentligste endringene er:
– Klassen string benyttes i stedet for nullterminerte strenger, som nå kun er tatt med for helt spesielle anvendelser.
– Det har kommet inn et kapittel om Standard Template Library (STL), der spesielt vektorer får en grundig behandling.
– Mer stoff om klasser og objekter er tatt med, for eksempel konstruktører og destruktører, utvidelse av bruksområdet til operatorer ("operator overloading"), polymorfi og arv.
– Boka har fått egen nettside, www.tisip.no/boker/cpp, og stoff som tidligere fulgte med på diskett, kan du nå finne der. Også løsning på småoppgavene ligger nå på denne nettsiden.
Vi takker …
– Stiftelsen TISIP, som i sin tid gjorde det mulig for oss å skrive denne boka, og som nå gjør det mulig å få revidert den.
– de mange studenter og andre som opp gjennom årene har brukt boka og kommet med verdifulle kommentarer og forslag.
– student Ingvar Ljosland som har foretatt alle de trivielle endringene, slik at vi kunne konsentrere oss om de vesentlige tingene.
Trondheim juli 2003
Else Lervik
Mildrid Ljosland
5-2 Data leses inn og behandles i løkke 137
5-3 Å huske en dataverdi fra et løkkegjennomløp til neste 141
5-4 Tellerkontrollerte løkker 143
5-5 Nøstede kontrollstrukturer 149
5-6 Kontroll av inndata 151
5-7 Testing og feilsøking 153
Repetisjonsoppgaver 159
Programmeringsoppgaver 161
6 Tekststrenger 165
6-1 Strengobjekter 166
6-2 Strengobjekt som funksjonsargument og returverdi 174
6-3 Funksjoner knyttet til strengobjekt 180
6-4 Nullterminerte tekststrenger 188
6-5 Innlesing av tekst og tall om hverandre 190
6-6 Å omforme tekst til tall og omvendt 194
6-7 Pseudokode 199
7 Funksjoner med ut-argumenter
7-1 Verdioverføring
7-2 Referanseoverføring
7-3 Funksjoner på flere nivåer
7-4 Funksjoner med utvidet bruksområde
7-5 Funksjonsargument med standardverdi
Repetisjonsoppgaver
8 Datatyper, operatorer og uttrykk
8-1 Uttrykk
8-2 De enkelte operatorene
8-3 Datatyper
8-4 Typeomforming
Repetisjonsoppgaver
9 Tabeller
9-1 Datastrukturen tabell
9-2 Å definere og bruke en tabell
9-3 Aktuell og maksimal lengde av tabellen
9-4 Tabell som argument til en funksjon
9-5 Søking og sortering 291
9-6
10 Objektorientert programmering
10-1 Eksempel på en klasse som byggekloss
10-3 Å programmere med klasser
10-4 Tekststrenger som datamedlemmer
10-5 Relasjoner mellom objekter av samme klasse
13-1 Betingelsesoperatoren og rekkefølgeoperatoren
13-3 Mer om for-setningen
13-4 do-while -setningen
13-5 Løkker – sammendrag
13-6 Hva er en kontrollstruktur?
Programmeringsoppgaver
14 Mer om klasser
14-1 Funksjonsargumenter og returverdier
14-2 Konstruktører
14-3 Destruktører 447
14-4 En-del-av-forhold mellom objekter
15 Utvidet bruksområde for operatorer 463
15-1 Hva menes med å utvide bruksområdet for en operator? 464
15-2 Eksempel: klassen Broek 467
15-3 Å definere operatorer som ikke-medlemsfunksjoner 478
15-4 Spesielle ting å ta hensyn til 482 Repetisjonsoppgaver 485
16 Adresser og pekere 489
16-1 Å lage og bruke en peker
16-2 Tabeller og pekere 493
16-3 Aritmetikk på og sammenlikning av pekere 497
16-4 Pekere må behandles med forsiktighet! 502
16-5 Peker til et objekt 503
16-6 new og delete 505
16-7 Fra flerdimensjonal til endimensjonal tabell 509
16-8 Peker til en tabell og en tabell av pekere 515
Repetisjonsoppgaver 520 Programmeringsoppgaver 522
17 STL-vektorer og -algoritmer 525
17-1 Hva er STL? 526
17-2 Konteineren vektor 526
17-3 Iteratorer 535
17-4 Elevregisteret som et objekt 538
17-5 Algoritmer 544
17-6 Vektorer, et gløtt bak kulissene 559
Repetisjonsoppgaver 568
Programmeringsoppgaver 569
18 Arv og polymorfi 573
18-1 Er-forhold og en-del-av-forhold 574
18-2 Et er-forhold er et arvehierarki 576
18-3 Å implementere et arvehierarki 580
18-4 Å bruke objekter av avledede klasser 586
18-5 Arv av funksjoner med utvidet bruksområde 597
18-6 Medlemsfunksjoner med spesielle arveegenskaper599
18-7 Vektorer og objekter i et arvehierarki 602
18-8 Syntaksbeskrivelser 604
Repetisjonsoppgaver 609
Programmeringsoppgaver 610
Litteratur 615
Vedlegg 617
V-1 ASCII-tegnsettet 618
V-2 Operatorer i C++ 619
V-3 Reserverte ord 621
V-4 Tallsystemer 622
V-5 Strukturer 625
V-6 Oversikt over standardbibliotekene 627
V-7 Norsk/engelsk ordliste 654
V-8 Programmeringsstandard 660
Stikkord 671