C Plus Plus
Från Unix.se, den fria unixresursen.
Innehåll |
Bakgrund
C++ är ett språk utvecklat av Bjarne Stroustrup vid AT&T Bell Labs nån gång under tidigt 80-tal. Språket är i stort sett en utökning av C (som namnet antyder för den C-kunnige), vilket betyder att nästan alla C-program också är kompilerbara med en C++-kompilator. Detta är bra eftersom mängden C-programmerare och C-källkod är mycket stor.
Introduktion
Ett av de viktigaste nya koncepten i designen av C++ är klasser (eng. class). Klasser gör det möjligt för programmeraren att lättare nyttja objektorienterade programmeringsprinciper.
C++ erbjuder också utökad typkontroll(?) (eng type checking) jämfört med C. I C++ lagras symboler inte bara rätt av med källkodsnamn, utan kompilatorn lägger även till en implementationsspecifik teckenkombination som ger information om vilken typ symbolen har, vilka parametrar av vilken typ om det är en funktion, osv. Detta är ännu ett utslag av arvet från C; det gör nämligen att man kan använda samma länkare för både C- och C++.
Klasser
Klasser är en viktig (om än ej nödvändig) del av klassbaserad objektorienterad programmering. En klass är användardefinierad typ som innehåller en mängd understrukturer, samt metoder (funktioner) för att manipulera klassen.
Operatoröverlagring
I C++ kan man omdefiniera betydelsen av operatorer beroende på vilka typer som ingår. Man kan exempelvis skapa en vektorklass och definiera +,-,+= och -= på lämpligt sätt.
class Vector { public: float x, y, z; Vector operator + (const Vector& other) { Vector result; result.x = x + other.x; result.y = y + other.y; result.z = z + other.z; return result; } }
Mallar
Mallar (eng. templates) är ett sätt att i C++ låta skriva en funktion eller klass som kan hantera godtycklig datatyp. Notationen är
template <typename T> deklaration
där deklaration ersätts med klass- eller funktionsdeklaration, i vilken T betecknar den aktuella typen.
template <typename T> T max(const T& a, const T& b) { return (a > b) ? a : b; } ... int m = max<int>(3, 6); CustomClass cc = max<CustomClass>(c1, c2); // c1, c2 av typ CustomClass
Det som händer är att kompilatorn tar över och i bakgrunden skapar implementationer för alla typer som används utifrån mallen som bara behöver skrivas en gång. Notera att detta kräver att en mallimplementation måste läggas inkluderas i källfilen den används i (alternativt inkluderas med #include). Annars vet inte kompilatorn veta för vilka typer den ska konkretisera mallen med. Vidare måste alla operatorer som används finnas tillgängliga för den aktuella typen. Detta möjliggörs av C++ operatoröverlagring beskriven ovan.
STL
STL (Standard Template Library) ingår i C++-standarden och är ett bibliotek av mallar. Här finns exempelvis vektorer, listor (enkelt och dubbelt länkade), diverse algoritmhjälpredor såsom sorteringfunktioner och annat. Tack vare användningen av mallar är det användbart för alla tänkbara typer. STL är inte lika gammalt som själva språket och standardisering har inte skett förrän relativt nyligen.
Header-filer
På tal om sen standardisering kan nämnas att standardbiblioteksfilerna i C++ inte längre inkluderas som
#include <iostream.h> #include <math.h>
utan
#include <iostream> #include <cmath>
Standardfilerna har alltså inte .h som ändelse. Notera också att det numer krävs att std:: anges före standardfunktioner och -klasser eftersom de ligger i detta namnutrymme. Dessutom heter det
int main([int argc, char** argv[, char** envp]])
och aldrig
void main(...)
Externa länkar
- www.cppreference.com - C/C++-referenser, bl.a. STL.
- www.gametutorials.com (http://www.gametutorials.com/Tutorials/tutorials.htm) - Engelsk sida med OpenGL- och C/C++-artiklar.
- www.cplusplus.se - Svensk sida med designtips och kodsnuttar.
- C++ faq-lite (http://www.parashift.com/c++-faq-lite) - Engelsk sida med svar på de flesta frågor om C++