C++

**C++** er et populært høynivå programmeringsspråk som er en utvidelse av språket C. C++ ble opprinnelig kalt «C with Classes» og ble utviklet og implementert av dansken Bjarne Stroustrup omkring 1983&ndash;85, som da jobbet for AT&T Bell Laboratories. 

C++ er et multiparadigme språk, med støtte for funksjonell programmering, objektorientert programmering (OOP), dataabstraksjon og generisk programmering.  Populariteten skyldes både at det bygger på C og at det er implementert for de fleste operativsystem .

## Historie
Navnet C++ ble lansert av Rick Mascitti sommeren 1983.  Det er et ordspill rundt forbedret C; i begge språkene så kan «C++» tolkes som «inkrementer C med en».

Tidlige versjoner av «C with Classes» har vært i bruk siden rundt 1980.  Den første bruken av C++ utenfor forskningsmiljøet var i juli 1983.

Etterhvert som språket ble populært, begynte man på en standardiseringsprosess.  Den amerikanske standardiseringsorganisasjonen ANSI startet sitt arbeid i desember 1989. I juni 1991 ble denne komiteen tatt opp av den internasjonale standardiseringsorganisasjonen ISO. I april 1995 kom det første offentlige utkastet til en standard, og i 1998 ble språket både en ISO- og ANSI-standard. Standarden ble revidert i 2003, og arbeidet med en ny utgave av standarden, populært kalt C++0x, har pågått siden da. 

Standardiseringen av språket inkluderer også standardbiblioteket.

## Teknisk overblikk

Ifølge standarden så består C++ av to deler: Kjernespråket og standardbiblioteket.  Biblioteket inkluderer det meste av det som tidligere var kjent som Standard Template Library (STL) og C-bibliotekene.  Mange andre biblioteker eksisterer også for språket, men disse er ikke en del av standarden.

### Kjernespråket
Kjernespråket bygger på C.
Egenskaper ved C++, som C ikke har, inkluderer *new*- og *delete*-operatorene, *bool* som datatype, referanser, bruken av *const*, *inline*-funksjoner, *default*-argumeter, overlagring av funksjoner, klasser (inkl. arv, medlemsfunksjoner, virtuelle funksjoner, abstrakte klasser, destruktorer og konstruktorer), overlagring av operatorer, *::*-operatoren, unntakshåndtering, typeidentifikasjon under kjøring, definert typekonvertering, og namespaces, for å hindre navnekonflikter. C++ sjekker også typer strengere enn C i noen tilfeller. Kommentarer som starter med to skråstreker ("//") var opprinnelig en del av C sin forgjenger BCPL, og ble tatt inn igjen i C++.

C++ har støtte for templates, som representerer en familie av klasser eller funksjoner. En template tar typisk en eller flere typer som parametre. En template som er blitt parametrisert med et gitt sett av typer kalles en *template-spesialisering*. En slik spesialisering oppfører seg som en vanlig klasse eller funksjon. På denne måten kan man skrive kode der oppførselen er uavhengig av typene det opereres på. Det finnes mange eksempler på dette i standardbiblioteket. Dersom man ønsker en spesiell oppførsel for et gitt sett av template-parametre, kan dette oppnås ved å skrive en *eksplisitt (full)* eller *delvis spesialisering* av templaten. 

### Standardbiblioteket
I tillegg til C-bibliotekene med matematiske funksjoner og annet, har C++ med Standard Template Library (STL).  Her tilbys blant annet generelle lagringstyper (vector, list, array og annet), strenger, iteratorer (generelle pekere inn i en lagringstype), I/O og algoritmer. Generisk kode gjør at man kan skrive algoritmer som virker på en hvilken som helst slags sekvens, definert av iteratorer. For eksempel så virker de innebygde sorteringsalgoritmene på både lister og vektorer.

## Hallo, verden! ([[Hello, world]])

```cpp
#include <iostream>

using namespace std;

int main()
{
    cout << "Hallo, verden!" << endl; // Skriver ut Hallo, verden! på skjermen.
    return 0;
}
```


Kommentert:

```cpp
#include <iostream> // inkluderer standardheader iostream

int main() // her starter programmet å kjøre
{
    // cout og endl ligger i navnerommet std
    // cout << "Hallo, verden!" : «copy out», kopierer "Hallo, verden!" til standard ut
    // endl : manipulerer standard inn slik at man får en ny linje
    // forkast resultatet med ;
    std::cout << "Hallo, verden!" << std::endl;
    // programmet returnerer 0 for å antyde suksess
    return 0;
}
```


## Referanser


## Bøker
*Bjarne Stroustrup: *The C++ Programming Language, Addison-Wesley*, ISBN 0-201-70073-5
*Bjarne Stroustrup: *The Design and Evolution of C++, Addison-Wesley*, ISBN 0-201-54330-3
*Nicolai M. Josuttis: *The C++ Standard Library, Addison-Wesley*, ISBN 0-201-37926-0

## Se også
*Forskjeller mellom C++ og Java
*Template
*Templatmetaprogrammering

## Eksterne lenker
* 
*  Bjarne Stroustrups hjemmeside 
*  ISO sin offisielle side
*  Happy Codings
### Guider/Tutorials
*  C/C++ Programming :: Veldig god for begynnere
*  C++ Language Tutorial :: Også veldig god for begynnere