TDT4102: Prosedyre- og objektorientert programmering
# Introduksjon
__C++__ er et programmeringspråk _Bjarne Stoustrup_ lagde med C som basis. C++ gir C objekt-orientert funksjonalitet. Kode skrevet som C er gyldig C++, men kode skrevet som C++ er ikke nødvendigvis gyldig C.
# Læringsmål
Fra <https://www.ntnu.no/studier/emner/TDT4102/2013>
## Kunnskap
* Har bred og praktisk orientert kunnskap om programmeringsspråket C++. Kan syntaks og regler for variabeldeklarasjoner og [datatyper](#datatyper), typekonvertering, kontrollstrukturer, funksjoner og operatorer, overlagring, klasser, arv, templates, unntakshåndtering.
* Har kunnskap om automatisk og dynamiske variabler og bruk av pekere.
* Har kunnskap om rekursjon, enkle algoritmer og datastrukturer.
* Har kunnskap om prosedural og objektorientert modularisering av koden og har kunnskap om hvordan kode kan organiseres i flere kildekodefiler, kompilering og lenking.
* Har kunnskap om standarbiblioteket, inn/ut datahåndtering, vanlig brukte funksjoner og template-klasser.
* Har kunnskap om moderne utviklingsverktøy, teknikker for feilfinning og enkel testing av egen kode.
* Har kunnskap om diagramtyper for objektorienterte programmer.
## Ferdigheter
* Kan utvikle et program fra problembeskrivelse til fungerende og feilfri løsning.
* Kjenner vanlige brukte kodingsteknikker og kan jobbe iterativt og effektivt med konstruksjon av egen kode.
* Kan programmere proseduralt hvor koden er fornuftig modularisert i funksjoner og objektorientert hvor koden er organisert i klasser. Kan velge hvilke hvilken løsning som er best for et gitt problem.
* Kan skrive kode som er gjenbrukbar, lesbar og enkel å vedlikeholde.
* Kan lese kode og forstå hvordan koden oppfører seg i kjøretid.
## Generell kompetanse
* Kan jobbe effektivt med med å analysere et problem og konstruere en løsning.
* Kan kommunisere og diskutere kodeløsninger og forklare hvordan et program fungerer.
* Kan finne frem til å benytte nødvendige hjelpemidler, kan bruke dokumentasjon for programmeringsspråket og standarbiblioteket.
# Grunnleggende
## Datatyper
||__Type__||__Størrelse__||__Beskrivelse__||
||int ||32 bit ||Heltall ||
||double ||64 bit ||Flyttall. Eks.: -2.4, 4.0||
||float ||32 bit ||Flyttall ||
||char ||8 bit ||Enkelt bokstav ||
||bool || ||`true`/`false` ||
## Objektstrukturer
### Class
En _klasse_ er en struktur for å definere en ny objekttype. Skal man f.eks. lage en program som håndterer bil-objekter, må man lage en klasse kallt Car. I klassedefinisjonen ramser man opp hvilke egenskaper og funksjoner en bil har.
### Enum
En _enumerering_ ligner en klasse. Forskjellen er at man med en enum må definere alle de mulige varianter man kan ha.
### Struct