C++-manual

Jan Ekholm

          chakie@infa.abo.fi
        

Ett kompendium skapat för att fungera som bas för undervisning i kursen C++-programmering. Detta kompendium är dock ännu under arbete och mycket kan ännu ändras!


Innehållsförteckning
1. Introduktion
Vad är C++
Historia
C och C++
Om detta kompendium
Copyright
Notation
Ett första program
Hello world!
Konventioner för namngivning av filer
Kompilera och köra program
Grundläggande syntax
Separering av satser
Kodblock
Formatering av kod
Kommentarer
2. Variabler och datatyper
Primitiva datatyper
Heltal
Flyttal
Tecken
Strängar
Booleans
Deklarera variabler
Giltiga variabelnamn
Tilldelning av variabler
Typkonvertering
Konstanter
3. Aritmetik
Normala aritmetiska operatorer
Jämföra variabler
Precedens
Modulus
Mera om division
Heltalsdivision
Flyttalsdivision
Precisionsproblem
Division med 0
Binär aritmetik
Shiftoperatorerna << och >>
Bitvisa operatorerna |, &, ^ och ~.
Inkrementerings- och dekrementeringsoperatorerna ++ och
Sammansatta tilldelningar
4. Enkel input/output
Utskrift till skärmen
Inmatning från tangentbordet
Headerfilen iostream
5. Iteration
while-slingor
Eviga slingor
Nästlade slingor
do-while-slingor
for-slingor
Avbryta och fortsätta slingor
Avbrytning med break
Fortsättning med continue
6. Flödeskontroll
if-satser
Gruppering av kod i block
Nästlade if-satser
if-else-satser
Logiska operatorer
Lazy evaluation
Kombinera uttryck
switch-uttryck
? :-operatorn
7. Funktioner
Grundbegrepp
Parametrar till funktioner
Returvärden
Anropa funktioner
Parametertyper
Referensparametrar
Konstanta parametrar
Funktionen main()
Returvärde från main()
Prototyper
Parametrar till main()
Omfattning (scoping)
Lokala variabler
Globala variabler
Statiska variabler
Rekursion
Funktioner som parametrar
Funktionsvariabler
Anropa funktionsvariabler
8. Input och output
Streams och buffring
Buffring av data
Utskrift till skärmen
Buffring och cout
Utskrift i olika talbaser
Utskrift av flyttal
Formatering av utskrifter
Inmatning från tangentbordet
Utskrift till cerr och clog
9. Avancerade datatyper
Pekare
Avreferera pekare
Pekare som parametrar
Konstanta pekare
Vektorer
Indexering av vektorer
Tilldelning och jämförelse av vektorer
Vektorer som pekare
Pekararitmetik
Vektorer som funktionsparametrar
Flerdimensionella vektorer
Flerdimensionella vektorer och minne
Sammansatta datatyper
Scoping
Accessera medlemmar
Jämföra och tilldela
Sammansatta datyper som parametrar
Enumereringar
Definiera egna datatyper
10. Preprocessorn
Vad är en preprocessor?
Inkludera filer
Standarden för C++
Konstanter
Makron
Nackdelar med makron
Multipel inkludering
11. Externa bibliotek
Vad är bibliotek?
Bibliotek under Unix
Bibliotek under Windows
Hur bibliotek fungerar
Bibliotek och header-filer
Fördelen med bibliotek
Exempelbibliotek
Matematikbibliotek
X11 och Windows
OpenGL
12. Dynamisk minneshantering
Vad är dynamisk minneshantering
Allokering och frigöring av minne
Allokering av minne
Allokera vektorer
Allokering av sammansatta datatyper
Frigöring av minne
Vanliga fel
Onitialiserat minne
Frigjort minne
Dubbel frigöring av minne
Fel indexering av vektor
Minnesläckor
Minneshantering på C:s vis
13. Kompilera C++-program
Kompilatorer
Kompilera program
Optimering och debuggning
Varningar
Sökstig för headerfiler
Länkning av program
Sökstig för bibliotek
Biblioteksberoenden
Använda multipla filer
Exempel på separat kompilering
14. Klasser
Allmänt om objektorientering
Abstraktion
Återanvändning av kod
Andra fördelar med OO i C++
Objektorienterad design
En första klass
Dataskydd
Konstruktor och destruktor
Initialisering av medlemmar
Multipla konstruktorer
Copy-konstruktor
Destruktor
Mera om copy-konstruktor
Nästlade klasser
Klasser i klasser
15. Ärvning
Mål med ärvning
Relationer mellan objekt
Återanvändning av kod
Terminologi
Konkret exempel
Subklasser och konstruktorer
Subklasser och destruktorer
Anropa subklassers metoder
Diskussion
Överlagring av metoder
Virtuella metoder
Privata metoder
Dynamisk bindning
Abstrakta klasser
Typer av ärvning
public ärvning
private ärvning
protected ärvning
Sammanfattning
Referera till basklasser
16. Multipel ärvning
Vad är multipel ärvning
Problem med multipel ärvning
Antalet objekt
Vilken metod?
Diskussion
17. Mera om klasser
Dynamiskt allokera objekt
Exempel på dynamisk minneshantering
Friends
Friend-metoder
Polymorfism
Funktions- och metodpolymorfism
Standardvärden för funktioner och metoder
Statiska metoder och medlemmar
Statiska metoder
Singleton
Pekaren this
18. Stränghantering
Vad är string egentligen
Skapa strängar
Längden av strängar
Accessera enskilda tecken
Tilldelning och jämförelse
Insättning av text
Addera strängar
Söka text i strängar
Sökning från början av strängen
Sökning från slutet av strängen
Sökning av första och sista förekomst av tecken
Sökning av första och sista förekomst av tecken inte i söksträngen
Ersätta text
Radera text
Substrängar
Streams och strängar
Skriva till strängar
Läsa från strängar
Strängstreams och kompatibilitet
Manipulera tecken
Konvertera tecken
Konvertera till C-strängar
Iteratorer och string
19. Filhantering
Klasser
Läsa från en fil
Avsluta inläsning
Läsa teckenvis
Läsa radvis
Ignorera tecken
Läsa binär data
Skriva data till fil
Skriva teckenvis
Skriva binär data
Hantera felsituationer
Stänga en fil
20. Exceptions
Vad är exceptions
Använda exceptions
Allokering och exceptions
Exceptions och konstruktorer
Återkasta en exception
Ofångade exceptions
Hierarkier med exceptions
Ärvda exceptions
21. Överlagring av operatorer
Vad är överlagring av operatorer?
Operatorer som kan överlagras
Exempelklassen Vector
Överlagring av operatorn +
Använda överlagrade operatorer
Överlagring av +=
Överlagring av operatorn -
Överlagring och friends
Friend-funktioner
Operatorerna == och =
Tilldelningsoperatorn =
Överlagring av << och >>
Överlagrad input med >>
Överlagring av typkonverteringar
Diskussion
22. Serialisering
23. Typparametrisering
Iden med templates
Ett konkret exempel
Instantiering av templateklasser
Multipla parametrar
Definiera lättare namn
24. Standard Template Library
Vad är STL
Grundblock i STL
Effektivitet
Containers
Sekvenscontainers
Sorterade associativa containers
Instättning och access av data
Radering av data
Övrig funktionalitet hos containers
Iteratorer
Använda iteratorer
Generiska algoritmer
Adaptorer
Diskussion
25. Namespaces
Vad är ett namespace
Exempel på namnkollision
Namespacet std
Använda namespaces
Alltid använda ett namespace
Använda subset av namespace
Klasser som namespaces
Skapa egna namespaces
Namespaces och prototyper
Aliaser
Diskussion
26. Typinformation
Varför dynamisk typinformation
Hur används typkonvertering
Praktiskt exempel
Typinformation
Missbruk av typinformation
A. C-strängar
Varför C-strängar?
Hur C-strängar fungerar
Skapa C-strängar
Manipulera enskilda tecken
Tilldelning och jämförelse
Tilldelning
Jämförelse
Längden av strängar
Kopiering av strängar
Färdiga funktioner
Konkatenering av strängar
Andra strängrelaterade funktioner
Söka tecken
Söka substrängar
Mera information
B. Input/output på C:s vis
Introduktion
Buffring
Headerfiler
Konceptet med filer
Utskrift till skärm
Utskrift av variabler
Utskrift av flyttal
Utskrift teckenvis
Utskrift till filer
Öppna och stänga filer
Skriva data till fil
Skriva till filer teckenvis
Skriva binär data till filer
Inläsning från tangentbordet
Inläsning radvis från tangentbordet
Formaterad inläsning
Inläsning från fil
I/O på låg nivå
C. Kodlistor
Klassen Vector
Referenser
Index