Bueno, resulta que estoy practicando lo que he aprendido en C++, aun tengo que dominar los punteros y la asignacion dinamica. Tambien en la creacion de arreglos, donde les explicare mi problema.
Cree una clase llamada "Persona", que tiene como atributos su nombre, su rut (en mi pais se refiere al numero de identificacion) y la edad.
Yo quiero crear un arreglo de personas, desde el main creo 3 personas y ademas, llamo a un metodo para que imprima los datos de cada persona, me funciona, pero no exactamente como queria, en el destructor yo implemente de tal manera que imprimiera un mensaje que confirmara que se esta borrando cada vez que se usa delete, es aqui donde sale mi problema, una vez que llene mi arreglo con personas, mando el arreglo a la funcion "desplegarDatos" para que imprimiera los datos de cada persona, pero me sale lo que escribi en el destructor justo al llamar a imprimir el arreglo, y ya cuando termino de imprimir, vuelve a imprimir el mensaje del destructor
¿ por que se imprimio al principio "borrando datos..." si no llame a delete, si el delete lo llamo cuando terminara de imprimir ?
Esto es lo que me sale en la ventana de comandos
Código:
Creando un arreglo de 3 personas
Borrando datos ...
Borrando datos ... // ¿ Por que sale esto al principio cuando deberia ser al final ?
Borrando datos ...
Desplegando datos de las personas
Nombre: Rodrigo
Rut: 132-K
Edad: 23
Nombre: Francisco
Rut: 342-L
Edad: 20
Nombre: Samuel
Rut: 345-P
Edad: 21
Borrando datos ...
Borrando datos ...
Borrando datos ...
RUN SUCCESSFUL (total time: 703ms)
Ahora lees dejo mi codigo
Código
#include "Persona.h" #include <string> #include <iostream> using namespace std; Persona::Persona(string n, string r, int e) { nombre = n; rut = r; edad = e; } Persona::Persona(const Persona& orig) { } Persona::Persona(){ } Persona::~Persona() { cout <<"\nBorrando datos ..."; } string Persona::getNombre(){ return nombre; } string Persona::getRut(){ return rut; } int Persona::getEdad(){ return edad; }
Código
#ifndef PERSONA_H #define PERSONA_H #include <string> using namespace std; class Persona { public: Persona(string nom, string r, int e); Persona(); Persona(const Persona& orig); virtual ~Persona(); string getNombre(); string getRut(); int getEdad(); private: string nombre; string rut; int edad; }; #endif /* PERSONA_H */
Código
#include <cstdlib> #include <iostream> #include "Persona.h" using namespace std; void desplegarDatos(Persona *arreglo){ cout <<"\n\nDesplegando datos de las personas\n\n"; for(int i=0; i<3; i++){ cout <<"\nNombre: " << arreglo[i].getNombre(); cout <<"\nRut: " << arreglo[i].getRut(); cout <<"\nEdad: " << arreglo[i].getEdad(); cout <<"\n"; } } int main(int argc, char** argv) { cout <<"Creando un arreglo de 3 personas"; Persona *personas = new Persona[3]; personas[0] = Persona("Rodrigo","132-K",23); personas[1] = Persona("Francisco","342-L",20); personas[2] = Persona("Samuel","345-P",21); desplegarDatos(personas); delete []personas; return 0; }