C++
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] 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] Característiques de C++Algunes de les principals característiques del llenguatge són:
Programa d'exemple (clàssic Hola mó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 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 Tipus de dadesC++ té els següents tipus fonamentals:
Mides associatsSegons 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":
wchar_tPer 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"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. PrincipisTot 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. El concepte de classeVegeu 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();
};
HerènciaVegeu també: Herència (programació). Existeixen dos tipus d'herència entre classes en el llenguatge de programació C++. Aquestes són:
Sobrecàrrega d'operadorsLa 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)
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 =...;" Diferències de tipus respecte a CEn 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. CompiladorsUn 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. Biblioteques
Referències
Vegeu tambéAltres llenguatges de programació: |
Portal di Ensiklopedia Dunia