viernes, 22 de mayo de 2015

20 - Tutorial de C++ en español - Punteros (Programación Orientada a Objetos)




En este capítulo del tutorial de C++ veremos unos ejemplos básicos de como manejar punteros en la Programación Orientada a Objetos a través de los punteros this - * - &

this es un puntero que nos permite hacer referencia al propio objeto, es decir que apunta a si mismo permitiéndole acceder a los miembros de la clase.

El operador de dirección (&) que devuelve la dirección de memoria de su operando.

El operador de indirección (*) que devuelve un alias para el objeto al cual apunta el operando del puntero. 

En el capítulo veremos un ejemplo de como utilizar this en la clase Deportista creada en el capítulo anterior, veremos como referenciar al propio objeto dentro de la clase, comprobaremos si el objeto referenciado es el propio objeto en sí.

También veremos como clonar un determinado objeto manejando los punteros de dirección (&) e indirección (*).

deportista.h


#include <iostream>
#include "persona.h"
using namespace std;

/*
Una de las principales propiedades de las clases es la herencia. Esta propiedad nos permite 
crear nuevas clases a partir de clases existentes, conservando las propiedades de la clase original 
y añadiendo nuevas.
*/

/* 
this es un puntero que nos permite hacer referencia al propio objeto, es decir que apunta a si mismo 
permitiéndole acceder a los miembros de la clase 
*/

class Deportista : public Persona
{
  protected:
            string _deporte;
  public:
         Deportista(string n, string a, string deporte) : Persona(n, a){this->_deporte=deporte;};
         string deporte(){return this->_deporte;};
         string cambiar_nombre(Deportista& d, string n)
         {
          if (&d == this) return this->_nombre=n;
          else return "El objeto seleccionado no soy yo";      
         }
};


deportista.cpp

#include <iostream>
#include "deportista.h"

using namespace std;

int main(int argc, char *argv[])
{

 Deportista deportista("Raul", "Gallardo Cuadrado", "Atletismo");
 cout << "Un Deportista:" << endl;
 cout << "Nombre: " << deportista.nombre() << endl;
 cout << "Apellidos: " << deportista.apellidos() << endl;
 cout << "Deporte: " << deportista.deporte() << endl;
 deportista.color_ojos = "verdes";
 cout << "Color de los ojos: " << deportista.color_ojos << endl;
 //Deportista cualquiera("h", "h", "h");
 cout << deportista.cambiar_nombre(deportista, "Mario") << endl;
 cout << "Nuevo Nombre: " << deportista.nombre() << endl;
 
 
 /* El puntero * nos permite apuntar a un objeto, reservando un espacio en la memoria 
 para el tipo de objeto seleccionado */
 
 Deportista * d;
 d = &deportista;
 cout << d->nombre() << endl;
 

 system("PAUSE");
 return 0;
}