C++
C++ är ett programspråk med stöd för dataabstraktion, objektorienterad programmering och generisk programmering samt även för högnivå hårdvarunära programmering. Språket utvecklades i början på 1980-talet av Bjarne Stroustrup vid Bell Labs. I dag är det ett av de populäraste programspråken och används inom allt från datorspel till konsumentelektronik.
C++ | |
Paradigm | multi-paradigm: procedurell, objektorienterad, generisk |
---|---|
Gavs ut | 1983 |
Skapat av | Bjarne Stroustrup |
Utvecklare | Bjarne Stroustrup, Bell Labs, ISO/IEC JTC1/SC22/WG21 |
Senaste version | ISO/IEC 14882:2020 (2020) |
Datatypsdisciplin | static, unsafe, nominative |
Implementationer | g++ (gcc), C++ Builder, LLVM Clang, Comeau C/C++, Intel C++ Compiler, Microsoft Visual C++, Oracle Developer Studio |
Influerat av | C, Simula, Ada 83, ALGOL 68, CLU, ML |
Influerat | Perl, LPC, Lua, Pike, Ada 95, Java, PHP, D, C99, C#, Falcon |
Plattform | Linux, Unix, Microsoft Windows, Apple OS X och iOS, Google Android m.fl. |
Webbplats | https://isocpp.org/ |
C++ är baserat på programspråket C och har anammat många begrepp och konstruktioner från det. Dock har man i C++ valt att stödja objektorienterad programmering genom att implementera bland annat klassbegreppet, från början inspirerat av Simula. C++ omfattar inte C i strikt mening då det finns flera skillnader i semantik mellan C och den delmängd av C++ som motsvarar C.
C++ används i allt större utsträckning där C traditionellt har använts.
Översikt
redigeraSpråkets syntax bygger på C men har utökats för att stödja fler programmeringsparadigmer. Även om syntaxen i C++ påminner starkt om den i C är programmen ofta uppbyggda på annorlunda sätt.
För att stödja objektorienterad programmering implementerades klassbegreppet genom att utöka syntaxen för strukturer och tillåta både funktioner och data att vara medlemmar i en struktur. Språket har dessutom stöd för konstruktorer, destruktorer, arv, virtuella funktioner samt överlagring av operatorer.
En kraftfull sida hos C++ är templates, på svenska mallar. Dessa är en syntax som möjliggör återanvändning av samma kod men för olika datatyper. Precis som man brukar undvika att hårdkoda data i sin kod kan man använda templates för att undvika att hårdkoda datatyper. Templates kan göras mycket avancerade, till den grad att det finns hela böcker om ämnet. Det finns ett antal templates i standardbiblioteket, till exempel listor, köer och tabeller för olika datatyper (heltal, flyttal, strängar etc.).
Typsystemet är mer stringent än för C och förbjuder åtskilliga av de implicita typkonverteringar som C tillåter. Som exempel kan nämnas att konverteringen från void *
till andra pekartyper är förbjuden i C++ men tillåten i C.
C++ är numera en ISO / IEC standard som utvecklas av en arbetsgrupp kallad WG21 [1], officiellt ISO/IEC JTC1 (Joint Technical Committee 1) / SC22 (Subcommittee 22) / WG21 (Working Group 21).
Historia
redigeraStroustrup påbörjade sitt arbete med språket 1979, inspirerad av bland annat Simula-67 och FORTRAN 77, och det började användas inom AT&T i augusti 1983.[2] Den ursprungliga kompilatorn kallades "CFront" och var en förkompilator till C som genererade C-kod.[3]Den första kommersiellt tillgängliga kompilatorn kom i oktober 1985.[2] Första internationella standarden av C++ kom 1998 [4] (ISO/IEC 14882:1998, även kallad C++98) och har uppdaterats fem gånger: 2003 (C++03), 2011 (C++11), 2014 (C++14), 2017 (C++17), 2020(C++20)[5]
Kodexempel
redigeraHello World
redigeraExempelkod för Hello World, som Bjarne Stroustrup presenterar i sin bok The C++ Programming Language:[6]
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
I/O och sortering
redigeraProgrammet läser in en serie tal, sorterar dem, och skriver ut dem.
#include <iostream> //importerar standardbiblioteksfilen för std::cout
#include <vector> //importerar standardbiblioteksfilen för std::vector
#include <algorithm> //importerar standardbiblioteksfilen för std::sort
int main() {
std::vector<int> vektor; //deklarerar en uppsättning av heltal med klassen vector i standardbiblioteket
int tal; //deklarerar ett heltal för lagring av användarrespons
while(std::cin >> tal) //inväntar användarrespons så länge den kan skrivas till "tal" som ett heltal
vektor.push_back(tal); //infogar respons i vektorn
std::sort(vektor.begin(), vektor.end()); //genomför standardbibliotekets inbyggda sorteringsalgoritm från vektorns början till dess slut
for (auto n : vektor) //itererar genom alla element i vektor och kopierar det aktuella elementet till variabeln "n"
std::cout << n << '\n'; //skriver variabeln "n" i konsolfönstret under varje iteration
}
Standardbibliotek
redigeraDefinierat inom den officiella standarden för C++ finns ett omfattande standardbibliotek, ibland benämnt Standard Template Library (STL) [7]. Det finns flera implementationer av STL att välja på, oftast levereras en implementation av STL tillsammans med en kompilator inom ett s.k. Software Development Kit (SDK).[8]
Icke-standardbibliotek
redigeraUtöver de bibliotek som ingår i standarden finns en stor mängd bibliotek för olika ändamål. C++ kan dessutom använda de flesta C-bibliotek. Ytterligare C++ bibliotek utöver standardbiblioteket finns listade på cppreference.com.[9]
Ett stort och vida använt bibliotek är Boost [10] som innehåller mängder av klasser och funktioner för att arbeta med bland annat linjär algebra, trådning, reguljära uttryck och enhetstestning.
Grafisk programmering
redigeraC++ innehåller inget grafiskt bibliotek då standarden är menad att vara portabel och ej bunden till en specifik plattform. Däremot finns det ett flertal tilläggsbibliotek som kan användas för att utveckla grafiska användargränssnitt.
Vill man skriva portabla grafiska program finns till exempel Qt, som är ett ramverk för utveckling av grafiska program i C++ som numera ägs och utvecklas av Digia. Qt finns för Linux, Windows, Mac OS, Embedded Linux och för Windows CE. Det finns också bindningar för GTK+ som kan användas för utveckling av grafiska program under Linux, Windows, Mac OS X, SkyOS och OS/2. Både Qt och GTK+ finns tillgängliga under fria licenser.
I Microsoft Windows är det möjligt att programmera direkt i Win32-API:t, vilket är ett gränssnitt direkt mot operativsystemet. Detta ger dock av naturliga skäl icke portabel kod. Dessutom består det till stor del av C-funktioner och -strukturer och inte av C++. Klassbiblioteket MFC [11](Microsoft Foundation Class Library) är ett bibliotek vilket är tänkt att kapsla in dessa funktioner i C++-klasser.
Direct X brukar ofta förknippas med C++ och är ett renderingsbibliotek utgivet av Microsoft. Det har en direkt koppling till Win32-API:t i form av att många basoperationer för fönster fortfarande sker genom det.
Noter
redigera- ^ ”WG21”. Arkiverad från ISO originalet den 13 juli 2009. https://web.archive.org/web/20090713013807/http://www.open-std.org/JTC1/sc22/WG21/. Läst 25 Okt 2016.
- ^ [a b] ”Stroustrup: FAQ”. Arkiverad från originalet den 16 juli 2012. https://web.archive.org/web/20120716211550/http://public.research.att.com/~bs/bs_faq.html#invention. Läst 2 november 2009.
- ^ ”Stroustrup: FAQ”. Arkiverad från originalet den 16 juli 2012. https://web.archive.org/web/20120716211550/http://public.research.att.com/~bs/bs_faq.html#bootstrapping. Läst 2 november 2009.
- ^ ”WG21 publikationer”. http://www.open-std.org/jtc1/sc22/wg21/docs/standards. Läst 25 okt 2016.
- ^ ”C++17 is formally approved”. Sutter’s Mill. 6 september 2017. https://herbsutter.com/2017/09/06/c17-is-formally-approved/. Läst 9 september 2017.
- ^ Stroustrup, Bjarne. ”Open Issues for the C++ Programming Language (3rd edition)”. https://www.stroustrup.com/3rd_issues.html., errata för sid 633, där frågan om
std::endl
diskuteras. - ^ ”STL”. http://en.cppreference.com/w/. Läst 25 okt 2016.
- ^ ”STL WG21”. https://isocpp.org/wiki/faq/class-libraries. Läst 25 okt 2016.
- ^ ”Cppreference.com Non-ANSI/ISO Libraries”. http://en.cppreference.com/w/cpp/links/libs. Läst 25 okt 2016.
- ^ ”Boost”. http://www.boost.org. Läst 25 okt 2016.
- ^ ”Microsoft MFC”. https://msdn.microsoft.com/en-us/library/fe1cf721.aspx. Läst 25 okt 2016.