Punters A Objectes

NOTA: Aquest article s'ha escrit like loc i conté faltes d'ortografia i montonades de polls. Li fa falta una revisió.

En altre tutorial explicaré les classes i els objectes en C++.

En el tutorial anterior havem vist lo bàsic dels punters. Ara anem a vore com treballar amb punters a objectes.

Perqué treballar amb punters a objectes?

Encara que es pot treballar de manera estàtica amb objectes igual que amb altres variables, anem a vore que es molt més practic treballar amb punters. Per ficar una raó, recordar que si passarem un objecte com a paràmetre d'una funció, al fer la crida enviariem tot el objecte, o siga, es faría una copia de tot el objecte. Aixó te dos inconvenients: El primer es que es molt lento, ja que ha de fer una gran transferència de dades al fer la crida a la funció. El segón es que si fem crides recursives podem ràpidament colapsar la pila (el famos "stack overflow") ja que la pila no sol ser molt gran. En canvi, si treballem amb punters noms viatjaràn 4 bytes "de merda". Ràpid i xicotet.

Val val, els que ja haveu empollat el tema de punters podeu dir: "ai, pos declare un objecte estàticament i després a la funció li pase la referència al objecte amb (&)". Pos si, es perfectament vàlid. Però en el moment en que comenceu a treballar més intensivament amb objectes voreu que usar punters te certes ventatges, com per exemple que podeu crear el objecte en una part del codi, estar usant-lo en altra, i alliberar la memòria en altra.

El cas es saber el que interessa cada vegada. Jo prefereixc usar sempre punters a objectes perque així no me tinc que preocupar de si este objecte era estatic o dinamic, i a més es sembla més a com treballen amb objectes els demés llenguatges. A més, sempre puc alliberarlos quan vullga, al contrari que els objectes estatics.

I com declare un punter a objecte?

Suposem que tenim una classe "CJailer":

CJailer *jailer;

Ale, ja està declarat.

I com li reserve memòria?

Com recordareu, els objectes tenen constructors. Al constructor de un objecte dinamic se li crida amb "new". Al cridar a "new" ja es reserva la memòria necessaria. Mola, no?

jailer = new CJAiler();

També podem inicialitzar els objectes en el moment de declararlos:

CJailer *jailer = new CJAiler();

I com accedeixc als seus mètodes i propietats?

Per a accedir als mètodes i propietats d'un objecte estatic usem el "." (per exemple, jailer.anarALaJail() ). Pos be, amb els punters a objectes usem el "->". O siga:

jailer->anarALaJail();

I ja està.

I com allibere la memòria?

Per a alliberar la memòria d'un punter a objecte:

delete jailer;

I ja està. No hi ha més.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License