llenguatge de programació From Wikipedia, the free encyclopedia
C++ és un llenguatge de programació[1] que fou creat, com el seu predecessor C, als laboratoris Bell (no confondre amb Graham Bell) de AT&T. L'autor principal n'és Bjarne Stroustrup. L'any 1980 s'hi van afegir noves característiques, entre les principals la integració de les classes, idea que va ser presa de Simula67, per molts considerat el primer llenguatge orientat a objectes. A partir d'aquí va evolucionar fins que l'any 1985 va ser consolidat com un llenguatge orientat a objectes[1] i anomenat C++.[2]
![]() | |
![]() | |
Tipus | llenguatge de programació orientat a objectes, llenguatge de programació multiparadigma, llenguatge de programació procedural, llenguatge de programació funcional, generic programming language (en) ![]() ![]() ![]() |
---|---|
Data de creació | 1983 |
Disseny | Bjarne Stroustrup ![]() |
Desenvolupador | Bjarne Stroustrup Bell Labs ISO/IEC JTC1/SC22/WG21 |
Paradigma de programació | multi-paradigma: orientat a objectes, programació funcional, programació genèrica. |
Darrera versió estable | ISO/IEC 14882:2003 (2003) |
Tipus de dades | fort, estàtic |
Dialectes | ISO/IEC C++ 1998, ISO/IEC C++ 2003 |
Influenciat per | C, Simula67, ALGOL 68, CLU, ML i Ada ![]() |
Ha influenciat | Perl, LPC, Lua, Pike, Ada 95, Java, PHP, D, C99, C# |
Sistema operatiu | multiplataforma |
Extensió dels fitxers | .cc .cpp .cxx .c++ .h .hh .hpp .hxx .h++ |
Codi font | Codi font ![]() |
Etiqueta d'Stack Exchange | Etiqueta, Etiqueta, Etiqueta, Etiqueta i Etiqueta ![]() |
Pàgina web | isocpp.org ![]() |
Actualment existeix un estàndard, anomenat ISO C++, al qual s'han adherit la majoria dels fabricants de compiladors més moderns. N'existeixen també alguns intèrprets, com ara ROOT.
Una particularitat del C++ és la possibilitat de redefinir els operadors (sobrecàrrega d'operadors), i de poder crear nous tipus que es comportin com tipus fonamentals.
El nom C++ va ser proposat per Rick Mascitti l'any 1983, quan el llenguatge va ser utilitzat per primera vegada fora d'un laboratori científic. Abans s'havia fet servir el nom "C amb classes". C++ significa increment de C i es refereix al fet que C++ és una extensió de C, però que manté la compatibilitat històrica amb el llenguatge C.[1]
Algunes de les principals característiques del llenguatge són:
Aquest programa escriu "Hola món" al dispositiu de sortida de defecte (habitualment el monitor),
#include <iostream>
using namespace std;
int main()
{
cout << "Hola, món!" << endl;
return 0;
}
Per als usuaris de Windows, per a poder visualitzar Hola, món!, hauran d'afegir
system("PAUSE");
o
getchar();
abans del
return 0;
En utilitzar la directiva #include
estem dient-li al compilador que busqui determinades coses en un arxiu que es diu iostream
. Per evitar redefinir coses ja fetes al posar-los igual nom, es va crear una cosa anomenada espais de nom del namespace en el singular de l'anglès. En aquest cas hi ha un espai de noms anomenat std
, que és on s'inclouen les definicions de totes les funcions i classes que conformen la llibreria estàndard de C++, entre moltes altres coses de l'objecte cout
, que representa el flux de sortida estàndard (típicament la pantalla o una finestra de text), i tot això és exactament el que diem en afegir la sentència using namespace std.
La definició de funcions és igual que a C, excepte per la característica que si el main no ha de recollir arguments, no tenim per què posar-los, a diferència de C, on calia posar-los explícitament, encara que no s'anessin a utilitzar. Queda només comentar que el símbol <<
es coneix com a operador d'inserció, i grosso modo està enviant a cout el que volem mostrar per pantalla perquè el pinti, en aquest cas la cadena "Hola, món!". El mateix operador <<
es pot usar diverses vegades en la mateixa sentència, de manera que gràcies a aquesta característica podem posar un caràcter endl
al final, que és l'equivalent del \n
o \r\n
(segons el sistema en què s'estigui programant) del llenguatge de programació C.
C++ té els següents tipus fonamentals:
Segons la màquina i el compilador que s'utilitzi els tipus primitius poden ocupar una determinada mida a la memòria. La següent llista il·lustra el nombre de bits que ocupen els diferents tipus primitius l'arquitectura x86. Mides de tipus primitius sota i386 (GCC) Tipus Nombre de Bits
Altres arquitectures poden requerir diferents mides de tipus de dades primitius. C++ no diu res sobre quin és el nombre de bits en un byte, ni de la mida d'aquests tipus, més aviat, ofereix només les "garanties de tipus":
Per a la versió de l'estàndard que es va publicar el 1998, es va decidir afegir el tipus de dada wchar_t, que permet l'ús de caràcters Unicode, a diferència del tradicional char, que contempla simplement al codi de caràcters ASCII estès. Al seu torn, s'ha definit per a la majoria de les funcions i classes, tant de C com de C++, una versió per treballar amb wchar_t, on usualment es prefixa el caràcter w al nom de la funció (de vegades el caràcter és un prefix). Per exemple:
Cal ressaltar que a C es defineix wchar_t com:
typedef unsigned short wchar_t;
Mentre que en C++ és en si mateix un tipus de dada.
La paraula clau void defineix en C++ el concepte de la no existència o no atribució d'un tipus en una variable o declaració. Com a tal, pot ser usada per destacar que una funció no rep paràmetres, com en:
int funció (void);
Tot i que la tendència actual és la de no posar la paraula "void". A més s'utilitza per determinar que una funció no retorna un valor (en l'anterior s'espera que retorni un valor tipus int), com a:
void funcio (int parametre);
Cal destacar que void no és un tipus. Una funció com la declarada anteriorment no pot retornar un valor per mitjà de return: la paraula clau va sola. No és possible una declaració del tipus:
void t; // Està malament
En aquest sentit, void es comporta de forma lleugerament diferent a com ho fa en C, especialment pel que fa al seu significat en declaracions i prototips de funcions. No obstant això, la forma especial void * indica que el tipus de dades és un punter. Per exemple:
void * memòria;
Indica que memòria és un punter a algun lloc, on es guarda informació d'algun tipus. El programador és responsable de definir aquests "algun", eliminant tota ambigüitat. Un avantatge de la declaració "void *" és que pot representar alhora diversos tipus de dades, depenent de l'operació de cast escollida. La memòria que hem apuntat en algun lloc, en l'exemple anterior, bé podria emmagatzemar un sencer, un flotant, una cadena de text o un programa, o combinacions d'aquests. És responsabilitat del programador recordar quin tipus de dades hi ha i garantir l'accés adequat.
Tot programa en C++ ha de tenir la funció main() (llevat que s'especifiqui en temps de compilació un altre punt d'entrada, que en realitat és la funció que té el main())
int main ()
{}
La funció main ha de tenir un dels següents prototips:
La primera és la forma per omissió d'un programa que no rep paràmetres ni arguments. La segona forma té dos paràmetres: argc, un nombre que descriu el nombre d'arguments del programa (incloent-hi el nom del programa mateix), i argv, un punter a una matriu de punters, de argc elements, on l'element argv [i] representa l'últim argument lliurat al programa. En el tercer cas s'afegeix la possibilitat de poder accedir a les variables d'entorn d'execució de la mateixa manera que s'accedeix als arguments del programa, però reflectits sobre la variable env.
El tipus de retorn de main és int. En acabar la funció main, s'ha d'incloure el valor de retorn (per exemple, return 0;, encara que l'estàndard preveu només dos possibles valors de retorn: EXIT_SUCCESS i EXIT_ERROR, definides en l'arxiu cstddef), o sortir per mitjà de la funció exit. Alternativament es pot deixar en blanc, en aquest cas el compilador és responsable d'afegir la sortida adequada.
Vegeu també: Classe (informàtica)
Els objectes en C++ són abstrets mitjançant una classe. Segons el paradigma de la programació orientada a objectes un objecte consta de:
Un exemple de classe que podem explicar com a exemple és la classe gos. Cada gos comparteix unes característiques (atributs). El seu nombre de potes, el color del seu pelatge o la seva mida són alguns dels seus atributs. Les funcions que ho facin bordar, canviar el seu comportament... aquestes són les funcions de la classe.
Aquest és un altre exemple d'una classe:
class Punt
{
// Per defecte els membres d'una classe són 'private' perquè només es puguin modificar des de la pròpia classe.
private:
// Variable membre privada [només hi pot accedir ella mateixa (la classe)].
int id;
protected:
// Variables membre protegides (hi poden accedir tant ella mateixa com les classes filles).
int x;
int y;
public: // Hi pot accedir tothom
// Constructor
Punt();
// Destructor
~Punt();
// Funcions membre o mètodes
int obtenerX();
int obtenerY();
};
Vegeu també: Herència (programació).
Existeixen dos tipus d'herència entre classes en el llenguatge de programació C++. Aquestes són:
La sobrecàrrega d'operadors és una forma de fer polimorfisme. És possible definir el comportament d'un operador del llenguatge perquè treballi amb tipus de dades definits per l'usuari. No tots els operadors de C++ són factibles de sobrecarregar, i, entre aquells que poden ser sobrecarregats, s'han de complir condicions especials. En particular, els operadors sizeof i:: no són sobrecàrregues.
No és possible en C++ crear un operador nou.
Els comportaments dels operadors sobrecarregats s'implementen de la mateixa manera que una funció, llevat que aquesta tindrà un nom especial: Tipus de dades de tornada operator<token del operador> (paràmetres)
->
(d'indirecció)==
<<=
>>=
Atès que aquests operadors són definits per un tipus de dades definit per l'usuari, aquest és lliure d'assignar qualsevol semàntica que desitgi. No obstant això, es considera de primera importància que les semàntiques siguin tan semblants al comportament natural dels operadors com perquè l'ús dels operadors sobrecarregats sigui intuïtiu. Per exemple, l'ús de l'operador unari - hauria canviar el "signe" d'un "valor".
Els operadors sobrecarregats no deixen de ser funcions, i per això poden retornar un valor, si aquest valor és del tipus de dades amb què treballa l'operador, permet l'encadenament de sentències. Per exemple, si tenim 3 variables A, B i C d'un tipus T i sobrecarreguem l'operador = perquè treballi amb el tipus de dades T, hi ha dues opcions: si l'operador no torna res una sentència com "A = B = C, "(sense les cometes) donaria error, però si es torna un tipus de dades T a l'implementar l'operador, permetria concatenar tots els elements es volguessin, permetent alguna cosa com" A = B = C = D =...;"
En C++, qualsevol tipus de dades que sigui declarat complet (fully qualified, en anglès) es converteix en un tipus de dades únic. Les condicions perquè un tipus de dades T sigui declarat complet són a grans trets les següents:
En general, això significa que qualsevol tipus de dades definit fent ús de les capçaleres completes, és un tipus de dades complet.
En particular, i, a diferència del que ocorria en C, els tipus definits per mitjà de struct o enum són tipus complets. Com a tals, ara són subjectes a sobrecàrrega, conversions implícites, etcètera.
Els tipus enumerats, llavors, ja no són simplement àlies per a tipus sencers, sinó que són tipus de dades úniques en C++. El tipus de dades bool, igualment, passa a ser un tipus de dades únic, mentre que en C funcionava en alguns casos com un àlies per a alguna classe de dada de tipus sencer.
Un dels compiladors lliures de C++ és el de GNU, el compilador G++ (part del projecte GCC, que engloba diversos compiladors per a diferents llenguatges). Altres compiladors comuns són Intel C++ Compiler, el compilador de Xcode, el compilador de Borland C++, el compilador de CodeWarrior C++, el compilador g++ de Cygwin, el compilador g++ de MinGW, el compilador de Visual C++, Carbide.c++, entre d'altres.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.