# Classes de C++

Una classe en C++ és un tipus definit per l'usuari o una estructura de dades declarada amb una paraula clau class que té dades i funcions (també anomenades variables membre i funcions membre) com a membres l'accés dels quals es regeix pels tres especificadors d'accés privat, protegit o públic. Per defecte, l'accés als membres d'una classe C++ és privat. Els membres privats no són accessibles fora de la classe; només es pot accedir a través dels mètodes de la classe. Els membres públics formen una interfície amb la classe i són accessibles fora de la classe.
Les instàncies d'un tipus de dades de classe es coneixen com a objectes i poden contenir variables de membre, constants, funcions de membre i operadors sobrecarregats definits pel programador.

## Diferències entre una estructura i una classe en C++

En C++, una classe definida amb la paraula clau class té membres privats i classes base per defecte. Una estructura és una classe definida amb la paraula clau struct. Els seus membres i classes base són públiques per defecte. A la pràctica, les estructures es reserven normalment per a dades sense funcions. Quan es deriva una estructura d'una classe/estructura, l'especificador d'accés per defecte per a una classe/estructura base és públic. I quan es deriva una classe, l'especificador d'accés predeterminat és privat.

## Declaració i ús

Les classes de C++ tenen els seus propis membres. Aquests membres inclouen variables (incloent altres estructures i classes), funcions (identificadors específics o operadors sobrecarregats) conegudes com a mètodes, constructors i destructors. Es declaren que els membres són accessibles de manera pública o privada mitjançant els especificadors d'accés public: i private: respectivament. Qualsevol membre que es trobi després d'un especificador tindrà l'accés associat fins que es trobi un altre especificador. També hi ha herència entre classes que poden fer ús de l'especificador protected:

### Classe global i local

Una classe definida fora de tots els mètodes és una classe global perquè els seus objectes es poden crear des de qualsevol lloc del programa. Si es defineix dins d'un cos de funció, llavors és una classe local perquè els objectes d'aquesta classe són locals a l'àmbit de la funció.

### Declaració bàsica i variables membres

Les classes es declaren amb la paraula clau class o struct. Dins d'aquesta declaració s'inclouen les declaracions dels membres.

### Funcions membre

Una característica important de la classe i l'estructura C++ són les funcions membres. Cada tipus de dades pot tenir les seves pròpies funcions integrades (anomenades mètodes) que tenen accés a tots els membres (públics i privats) del tipus de dades. Al cos d'aquestes funcions membre no estàtiques, la paraula clau this es pot utilitzar per fer referència a l'objecte per al qual es crida la funció. Això s'implementa habitualment passant l'adreça de l'objecte com a primer argument implícit a la funció.

### Herència

L'estàndard C++ no especifica la disposició de les classes que no són POD a la memòria. Per exemple, molts compiladors C++ populars implementen l'herència única mitjançant la concatenació dels camps de classe pare amb els camps de classe fill, però això no és requerit per l'estàndard. Aquesta elecció de disseny fa que fer referència a una classe derivada mitjançant un punter al tipus de classe pare sigui una operació trivial.

### Operadors sobrecarregats

En C++, els operadors, com ara + - * /, es poden sobrecarregar per adaptar-se a les necessitats dels programadors. Aquests operadors s'anomenen operadors de sobrecàrrega.

### Constructors

De vegades, els programadors poden voler que les seves variables prenguin un valor predeterminat o específic després de la declaració. Això es pot fer declarant constructors.

### Destructors

Un destructor és la inversa d'un constructor. Es crida quan es destrueix una instància d'una classe, per exemple, quan s'elimina un objecte d'una classe creada en un bloc (conjunt de claus "") després de la clau de tancament, llavors el destructor es crida automàticament. Es cridarà en buidar la ubicació de memòria que emmagatzema les variables. Els destructors es poden utilitzar per alliberar recursos, com ara memòria assignada a un munt i fitxers oberts quan es destrueix una instància d'aquesta classe.

## Referències

* ↑ ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §9 Classes [class] para. 4
* ↑ «C++ Classes and Objects» (en anglès americà). [Consulta: 17 desembre 2023].
* ↑ «Classes (I)». [Consulta: 17 desembre 2023].
* ↑ «thiscall (C++)» (en anglès). [Consulta: 26 gener 2009].
* ↑ «C++ Classes and Objects» (en anglès). [Consulta: 17 desembre 2023].