33 - Objetos dinámicos


Hemos visto que podemos localizar vectores en la pila dinámica, lo mismo podemos hacer cuando creamos objetos de una determinada clase.

Tengamos en cuenta que almacenar objetos en la pila dinámica nos provee como ventaja tener más espacio y poderlo crear y destruir según la necesidad de nuestro programa. Veremos que cambia la sintaxis cuando trabajamos con objetos dinámicos.

Problema 1:

Desarrollar una clase que permita cargar el nombre y la edad de una persona. Mostrar los datos cargados. Imprimir un mensaje si es mayor de edad (edad>=18) o no. Crear en la main un objeto dinámico de esta clase y llamar a sus métodos.

Programa:

#include <iostream>

using namespace std;

class Persona {
private:
    char nombre[40];
    int edad;
public:
    void inicializar();
    void imprimir();
    void esMayorEdad();
};

void Persona::inicializar()
{
    cout <<"Ingrese nombre:";
    cin.getline(nombre,40);
    cout <<"Ingrese edad:";
    cin >>edad;
}

void Persona::imprimir()
{
    cout <<"Nombre:";
    cout <<nombre;
    cout <<"\n";
    cout <<"Edad:";
    cout <<edad;
    cout <<"\n";
}

void Persona::esMayorEdad()
{
    if (edad>=18)
    {
        cout <<"Es mayor de edad.";
    }
    else
    {
        cout <<"No es mayor de edad.";
    }
    cin.get();
    cin.get();
}

int main()
{
    Persona *persona1;
    persona1 = new Persona();
    persona1->inicializar();
    persona1->imprimir();
    persona1->esMayorEdad();
    delete persona1;
    return 0;
}

Este proyecto lo puede descargar en un zip desde este enlace : ObjetosDinamicos1

Como vemos en la main estamos definiendo un puntero de la clase Persona:

    Persona *persona1;

No se ha creado hasta ahora un objeto, sino solo un puntero. Para crear un objeto debemos utilizar el operador new:

    persona1 = new Persona();

Para llamar a los métodos debemos utilizar el operador -> (flecha) que son los caracteres: menos y el mayor.

    persona1->inicializar();
    persona1->imprimir();
    persona1->esMayorEdad();

Si bien podemos utilizar el caracter * (que significa lo apuntado) luego debemos disponer entre paréntesis el nombre del puntero (es una sintaxis poco utilizada):

 (*persona1).imprimir();

Finalmente debemos liberar el espacio del objeto:

    delete persona1;

Retornar