C++

C++ (udtales C plus plus) er et multiparadigmatisk programmeringssprog baseret på C, med hvilket det fastholder næsten fuldstændig kompatibilitet. C++ er udviklet primært af Bjarne Stroustrup.

Historie 

C++ blev oprindeligt udviklet af danskeren Bjarne Stroustrup i begyndelsen af 1980'erne (oprindelig kaldt C with Classes) og blev i løbet af en årrække et af de mest populære programmeringssprog nogensinde.

I dag er C++ særligt populært inden for computerspilsudvikling og andre steder, hvor man udvikler programmer, der kræver et højniveausprog og høj hastighed samtidig.

Den første C++-kompiler hed CFRONT og oversatte C++-kode til maskinafhængig C-kode. Det regnedes for en rigtig compiler, da den i modsætning til præprocessorer udførte fuld syntaktisk og semantisk tjek af kildekoden.

Filosofi 
Filosofien bag C++ er at det skal være et højt ydelses sprog der, måske bortset fra Assembler, ikke har behov for noget lavere-liggende sprog. Centralt her er princippet om "Zero cost abstractions" (gratis abstraktionsniveau) hvor de i sproget indbyggede faciliteter (f.eks. virtuelle funktioner) ikke må kunne implementeres hurtigere ved at brugeren skriver speciel kode. Med udviklingen af moderne kompilere er dette lykkedes i en grad så man er begyndt at tale om "negative cost abstractions", altså at man ved at skrive højniveau kode kan skrive kode, der kører hurtigere og mere effektivt end sammenlignelig C-kode.
C++ er et multi paradigme sprog, der understøtter procedural kode (com i C eller Pascal), objekt-orienteret kode og funktionsorienteret programmering.

Ressource håndtering 
I modsætning til mange populære sprog såsom Java og C# er der ingen support for garbage collection i C++. I stedet danner man objekter, der når de dannes henter deres ressourcer og når de destrueres frigiver dem. Dette er en mere generel metode da man her kan kontrollere alle ressource-typer (f.eks. filer og låse) og ikke blot hukommelse. Det kræver så til gengæld mere disciplin da man i god C++ kode skal huske altid at indkapsle sine ressourcer i et objekt.

Objektorienterede egenskaber 
C++'s objektorienterede (OOP) syntaks er primært inspireret af Simula 67. Det andet C-baserede programmeringssprog, Objective-C, der konkurrerer med C++, får sin OOP-syntaks andetsteds fra. C++ er også inspireret af ALGOL 68, Ada, CLU og ML. Sprog som Java og C# er inspireret af C++ og får mange af deres features samt syntaks herfra.
 
C++ er standardiseret, både af ISO og ANSI.

"Hello World!"-eksempel i C++ 

#include <iostream>
class hello
{
};

std::ostream& operator<< (std::ostream& o, const hello&)
{
    return o << "Hej verden";
}

int main()
{ 
    hello h;
    std::cout << h << std::endl;
    return 0;
}

Hello World-programmet kan skrives på mange måder i C++. Det ovenstående eksempel er et der forsøger at illustrere brugen af klasser og streams.

Et mere klassisk (C-lignende) Hello World-program:
#include <iostream>

int main()
{ 
    std::cout << "Hello World!\n"; 
    return 0;
}

Kompatibilitet med C 
Da Bjarne Stroustrup udviklede C++, lagde han stor vægt på, at C++ skulle fungere som en udvidelse til C. Af denne grund er alle basale features identiske med C, fx operator præcedens. Dette gør det muligt at portere C-kode til C++-. Et problem her er at C++ har færre implicitte konverteringer:
int* i = malloc(sizeof(int) * 5); /* Implicit konvertering fra void* til int* */
I C++ kræver en sådan konvertering en eksplicit typekonvertering:
int* i = (int* ) malloc(sizeof(int) * 5);

Standardbibliotek 
Standardbiblioteket i C++ er forholdsvis lille. F.eks. indeholder det ikke faciliteter til grafiske brugergrænseflader eller netværk. Det forventes, at brugeren vælger nogle passende biblioteker til at supplere med disse faciliteter, som f.eks. Qt.

Standardbiblioteket indeholder Standard Template Library (STL). STL indeholder en række klassedefinitioner, templates samt funktioner, der tilsammen implementerer de mest almindelige programmeringsopgaver, såsom sortering, søgning, tekstmanipulation, filhåndtering og andre lignende.

C++ bliver løbende revideret. Den første egentlige revision var C++11 (fra 2011), der blandt andet tilføjede en hukommelses model med support for flertrådet programmering, variadiske templates, lambdas og flere dele af boost såsom shared_ptr. Det var oprindelig meningen at den nye version af C++11 skulle være klar meget tidligere, men standardiseringen tog længere tid end forventet og derfor besluttedes det at fremtidige revisioner skulle laves hvert tredje år. Siden har C++14, C++17 og C++20 set dagens lys hvor de to sidste cifre angiver årstallet for udgivelsen.

Derudover indeholder C++ hele standardbiblioteket fra C.

Det er meget almindeligt at blande C++-kode med C-biblioteker, hvilket gør den store mængde af C-biblioteker tilgængelige.

Eksterne henvisninger 

Programmeringssprog