23 - Destructor de la clase


En C++ podemos definir un método que se ejecute cuando se elimine el objeto y en forma automática. Este método se lo llama destructor.

El destructor tiene las siguientes características:

Problema 1:

Mostrar la tabla de multiplicar de un valor que se ingresa por teclado. En el constructor pedir el entero. Al finalizar el programa mostrar un mensaje de despedida (este mensaje mostrarlo en el destructor).

Programa:

#include<iostream>

using namespace std;

class Tabla {
private:
    int valor;
public:
    Tabla();
    void imprimir();
    ~Tabla();
};


Tabla::Tabla()
{
    cout << "Ingrese un valor:";
    cin >> valor;
}

void Tabla::imprimir()
{
    for (int f = valor; f <= valor * 10; f = f + valor)
    {
        cout << f << "-";
    }
    cout << "\n";
}

Tabla::~Tabla()
{
    cout << "Gracias por utilizar este programa.";
    cin.get();
    cin.get();
}

int main()
{
    Tabla tabla1;
    tabla1.imprimir();
    return 0;
}

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

En C++ con clases más complejas tiene mucho sentido el empleo de estos dos métodos (constructor y destructor) sabiendo que el constructor será el primer método que se ejecutará y el destructor el último método.

El destructor se lo declara con el mismo nombre de la clase más el caracter ~:

class Tabla {
private:
    int valor;
public:
    Tabla();  /Constructor
    void imprimir();
    ~Tabla(); //Destructor
};

Cuando implementamos el destructor lo hacemos de la siguiente manera:

Tabla::~Tabla()
{
    cout << "Gracias por utilizar este programa.";
    cin.get();
    cin.get();
}

Podemos codificar lo que necesitemos en el destructor pero sabiendo que será el último método que se ejecutará en forma automática.

Donde creamos un objeto de la clase Tabla podemos ver que no se llama el destructor:

int main()
{
    Tabla tabla1;
    tabla1.imprimir();
    return 0;
}

Recordemos que todo programa en C++ comienza a ejecutarse en la main, en este caso definimos el objeto tabla1 de la clase Tabla. Luego de llamar a método imprimir llega la llave del final de la main pero previo a esto se llama el destructor de la clase Tabla.

Problema propuesto

  1. Confeccionar una clase llamada Sumatoria que solicite la carga valores enteros por teclado. Finalizar la carga de valores al ingresar el cero. Mostrar en el destructor la suma de los valores ingresados.
Solución
#include <iostream>

using namespace std;

class Sumatoria {
private:
    int suma;
public:
    void cargar();
    ~Sumatoria();
};


void Sumatoria::cargar()
{
    int valor;
    suma = 0;
    do {
        cout << "Ingrese un valor (0 para finalizar):";
        cin >> valor;
        suma = suma + valor;
    } while (valor != 0);
}

Sumatoria::~Sumatoria()
{
    cout << "La suma de todos los valores ingresados es:";
    cout << suma;
    cin.get();
    cin.get();
}


int main()
{
    Sumatoria sumatoria1;
    sumatoria1.cargar();
    return 0;
}

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

Retornar