elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8
41  Programación / Programación C/C++ / Problema con crear una Pila Generica (y otras dudas) (ACTUALIZADO) en: 21 Septiembre 2013, 10:15 am
Estoy tratando de crear un Pila Generica, que me pueda almacenar todo tipo de datos, por ejemplo, poder crear una pila de enteros, otra de doubles, otra de floats, etc, vi que es necesario usar templates, estaba siguiendo el ejemplo de un libro cuyo autor se llama "Ellis Horowitz" pero la verdad que no lo veo muy explicativo, se salta muchos pasos, estaba buscando en otro sitio pero no puedo resolver la duda, ojala alguien me ayude.
Se me olvido decir que en la clase Pila no me deja mensajes con el "cout", me detecta error, ¿ a que se debera ? Lo deje como comentario.

Bueno, en este foro mucha gente me ha sacado de apuros, se los agradezco, ojala tambien en esta pueda salir, saltar de Java a C++ me fue un poco dificil, ahora pongo el codigo

Lo que me sale en la ventana de comandos:

Código:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/repaso39.exe
make[2]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
mkdir -p build/Debug/Cygwin_4.x-Windows/_ext/931385675
rm -f build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d
g++    -c -g -MMD -MP -MF build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o.d -o build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o ../Repaso39/Pila.cpp
mkdir -p dist/Debug/Cygwin_4.x-Windows
g++     -o dist/Debug/Cygwin_4.x-Windows/repaso39 build/Debug/Cygwin_4.x-Windows/_ext/931385675/Pila.o  build/Debug/Cygwin_4.x-Windows/main.o
build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:8: undefined reference to `Pila<int>::Pila(int)'
/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39/main.cpp:10: undefined reference to `Pila<int>::~Pila()'
collect2: error: ld returned 1 exit status
nbproject/Makefile-Debug.mk:63: recipe for target `dist/Debug/Cygwin_4.x-Windows/repaso39.exe' failed
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/repaso39.exe] Error 1
make[2]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-Debug.mk:60: recipe for target `.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso39'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2,, total time: 5s)

Ahora el codigo

Código
  1. #include <cstdlib>
  2. #include "Pila.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char** argv) {
  7.  
  8.    Pila<int> pila(10); //Creando una pila de enteros de 10 espacios
  9.  
  10.    return 0;
  11. }
  12.  
  13.  

Código
  1. #ifndef PILA_H
  2. #define PILA_H
  3.  
  4. template <class T>
  5. class Pila {
  6. public:
  7.  
  8.    Pila(int t);
  9.    Pila(const Pila& orig);
  10.    virtual ~Pila();
  11.    void push(T e);
  12.    T pop();
  13.    bool isEmpty();
  14.    bool isFull();
  15.  
  16. private:
  17.  
  18.    int tam; // El tamanio del arreglo
  19.    int top; // La posicion del ultimo elemento
  20.    T *arreglo;
  21.  
  22. };
  23.  
  24. #endif /* PILA_H */
  25.  
  26.  

Código
  1. #include "Pila.h"
  2. #include <iostream>
  3.  
  4. template <class T>
  5. Pila<T>::Pila(int t) {
  6.  
  7.    this->tam = t;
  8.    this->top = -1;
  9.    this->arreglo = new T[tam];
  10.  
  11. }
  12.  
  13. template <class T>
  14. Pila<T>::Pila(const Pila& orig) {
  15.  
  16.    // Por implementar
  17.  
  18. }
  19.  
  20. template <class T>
  21. Pila<T>::~Pila() {
  22.  
  23.    delete []arreglo;
  24.  
  25. }
  26.  
  27. /*
  28.  * Funcion que agrega un elemento a la pila.
  29.  */
  30.  
  31. template <class T>
  32. void Pila<T>::push(T e){
  33.  
  34.    if(isFull()){
  35.  
  36.        //cout << "\nLa pila esta llena\n";
  37.  
  38.    }else{
  39.  
  40.        arreglo[++top] = e;
  41.  
  42.    }
  43.  
  44. }
  45.  
  46. /**
  47.  * Funcion que obtiene un elemento de la pila.
  48.  * @return El elemento que esta el tope de la pila.
  49.  */
  50.  
  51. template <class T>
  52. T Pila<T>::pop(){
  53.  
  54.    if(isEmpty()){
  55.  
  56.        //cout << "\nLa pila esta vacia\n";
  57.  
  58.    }else{
  59.  
  60.        return arreglo[top--];
  61.  
  62.    }
  63. }
  64.  
  65. /*
  66.  * Funcion que revisa si la pila esta vacia
  67.  */
  68.  
  69. template <class T>
  70. bool Pila<T>::isEmpty(){
  71.  
  72.    if(top == -1){
  73.  
  74.        return true;
  75.  
  76.    }
  77.  
  78. }
  79.  
  80. /*
  81.  * Funcion que revisa si la pila esta llena
  82.  */
  83.  
  84. template <class T>
  85. bool Pila<T>::isFull(){
  86.  
  87.    if(top == tam){
  88.  
  89.        return true;
  90.  
  91.    }
  92.  
  93. }
  94.  
  95.  
42  Programación / Programación C/C++ / Re: Ayuda con punteros (en C++) (Actualizacion constante con nuevas preguntas) en: 18 Septiembre 2013, 06:05 am
Gracias, he aprendido mucho preguntando en el foro elhacker, por eso gracias a los que me han ayudado.

Ahora, como habia dicho antes en este tema, me propuse ejercitar con listas enlazadas (estoy viendo estructura de datos en c++), en este caso, elegi usar "listas con doble nexo", algo asi

 NULL - O = O = O = O ....................... =O = O = O = O - NULL

El nodo anterior y siguiente de cada nodo lo represento como punteros, el codigo que hice me funciona ni me da problemas, pero, tengo una pregunta que tiene que ver mas con la optimizacion de la memoria.

Si bien, yo cree una lista de forma automatica (que deberia borrarse solo), ¿ que pasa con los nodos que siguiente y anterior creados de forma dinamica ?, ¿ Tendre que borrarlos uno por uno con delete ?, ¿existe algun modo de borrarlos de manera casi instantaneas ?

Les dejo mi codigo

Código
  1. #include "Nodo.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. Nodo::Nodo(int n) {
  7.  
  8.    dato = n;
  9.    siguiente = 0;
  10.    anterior = 0;
  11.  
  12. }
  13.  
  14. Nodo::Nodo(const Nodo& orig) {
  15. }
  16.  
  17. Nodo::~Nodo() {
  18.  
  19.    cout <<"\nDestruyendo nodo ...\n";
  20.  
  21. }
  22.  
  23. void Nodo::setSiguiente(Nodo *s){
  24.  
  25.    siguiente = s;
  26.  
  27. }
  28.  
  29. void Nodo::setAnterior(Nodo *a){
  30.  
  31.    anterior = a;
  32.  
  33. }
  34.  
  35. int Nodo::getDato(){
  36.  
  37.    return dato;
  38. }
  39.  
  40. Nodo* Nodo::getSiguiente(){
  41.  
  42.    return siguiente;
  43.  
  44. }
  45.  
  46. Nodo* Nodo::getAnterior(){
  47.  
  48.    return anterior;
  49.  
  50. }
  51.  
  52.  
  53.  
  54.  
  55.  

Código
  1. #ifndef NODO_H
  2. #define NODO_H
  3.  
  4. using namespace std;
  5.  
  6. class Nodo {
  7. public:
  8.    Nodo(int n);
  9.    Nodo(const Nodo& orig);
  10.    virtual ~Nodo();
  11.    void setSiguiente(Nodo *s);
  12.    void setAnterior(Nodo *a);
  13.    int getDato();
  14.    Nodo* getSiguiente();
  15.    Nodo* getAnterior();
  16. private:
  17.    int dato;
  18.    Nodo *siguiente;
  19.    Nodo *anterior;
  20. };
  21.  
  22. #endif /* NODO_H */
  23.  
  24.  

Código
  1. #include "Lista.h"
  2. #include "Nodo.h"
  3. #include <iostream>
  4.  
  5. Lista::Lista() {
  6.  
  7.    head = NULL;
  8.    tail = NULL;
  9.  
  10. }
  11.  
  12. Lista::Lista(const Lista& orig) {
  13. }
  14.  
  15. Lista::~Lista() {
  16.  
  17.    cout <<"\nDestruyendo lista";
  18.  
  19. }
  20.  
  21. void Lista::setHead(int num){
  22.  
  23.    Nodo *nuevo = new Nodo(num);
  24.  
  25.    if(isEmpty()){
  26.  
  27.        head = nuevo; //La cabeza apunta a la direccion del nuevo nodo
  28.        tail = nuevo; //La cola tambien apunta a la direccion del nuevo nodo;
  29.  
  30.    }else{
  31.  
  32.        nuevo->setSiguiente(head); //Nuevo nodo apunta hacia adelante, a la direccion de la ex cabeza
  33.        head->setAnterior(nuevo); //La ex cabeza apunta hacia atras a la nueva cabeza
  34.        head = nuevo; //La cabeza es apuntada hacia el nuevo nodo;
  35.  
  36.    }
  37.  
  38. }
  39.  
  40. Nodo* Lista::getHead(){
  41.  
  42.    return head;
  43.  
  44. }
  45.  
  46. Nodo* Lista::getTail(){
  47.  
  48.    return tail;
  49.  
  50. }
  51.  
  52. bool Lista::isEmpty(){
  53.  
  54.    if(head == NULL){
  55.  
  56.        return true;
  57.  
  58.    }else{
  59.  
  60.        return false;
  61.  
  62.    }
  63. }
  64.  
  65.  

Código
  1. #ifndef LISTA_H
  2. #define LISTA_H
  3. #include "Nodo.h"
  4.  
  5. class Lista {
  6. public:
  7.    Lista();
  8.    Lista(const Lista& orig);
  9.    virtual ~Lista();
  10.    void setHead(int num);
  11.    Nodo* getHead();
  12.    Nodo* getTail();
  13.    bool isEmpty();
  14. private:
  15.    Nodo *head;
  16.    Nodo *tail;
  17. };
  18.  
  19. #endif /* LISTA_H */
  20.  
  21.  
43  Programación / Programación C/C++ / Re: Ayuda con punteros (en C++) en: 17 Septiembre 2013, 09:18 am
Gracias, se me olvidó ese detalle de que auto2 no fue creado por new y por eso no debo usar delete.



Ahora tengo otro problema, ahora me invente este problema, quise crear una clase que se llama Persona, sus atributos son el nombre, rut (en mi pais se refiere al numero de indentificacion) y la edad, tambie agregue un puntero que apunta a persona, con la intencion de que indicara a su hermano.

Yo me imagine esto, cuando creo a una persona, se le asigna una direccion en la memoria, a si que como soy imaginativo, dije "aaahh, voy a imaginar que la direccion de la memoria es la direccion de su casa", de esta manera, cree 2 personas de manera dinamica, pero el problema me sucede cuando quiero preguntar por los hermanos atraves de una funcion getHermano, me sale un error. Les dejo el error que me sale en la ventana de comandos y el codigo (Estoy usando Netbeans 7.3)

Código:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso24'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/repaso24.exe
make[2]: Entering directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso24'
mkdir -p build/Debug/Cygwin_4.x-Windows/_ext/931385711
rm -f build/Debug/Cygwin_4.x-Windows/_ext/931385711/Persona.o.d
g++    -c -g -MMD -MP -MF build/Debug/Cygwin_4.x-Windows/_ext/931385711/Persona.o.d -o build/Debug/Cygwin_4.x-Windows/_ext/931385711/Persona.o ../Repaso24/Persona.cpp
../Repaso24/Persona.cpp: In function ‘Persona Persona::* getHermano()’:
../Repaso24/Persona.cpp:54:12: error: ‘hermano’ was not declared in this scope
nbproject/Makefile-Debug.mk:67: recipe for target `build/Debug/Cygwin_4.x-Windows/_ext/931385711/Persona.o' failed
make[2]: *** [build/Debug/Cygwin_4.x-Windows/_ext/931385711/Persona.o] Error 1
make[2]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso24'
nbproject/Makefile-Debug.mk:60: recipe for target `.build-conf' failed
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/cygdrive/c/Documents and Settings/Administrador/Escritorio/C++/Repaso24'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
make: *** [.build-impl] Error 2


BUILD FAILED (exit value 2,, total time: 9s)


Código
  1. #include "Persona.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Persona::Persona() {
  8. }
  9.  
  10. Persona::Persona(string n, string r, int e){
  11.  
  12.    nombre = n;
  13.    rut = r;
  14.    edad = e;
  15.    hermano = 0;
  16.  
  17. }
  18.  
  19. Persona::Persona(const Persona& orig) {
  20. }
  21.  
  22. Persona::~Persona() {
  23.  
  24.    cout <<"\n\nAniquilando a " << nombre;
  25.  
  26. }
  27.  
  28. string Persona::getNombre(){
  29.  
  30.    return nombre;
  31.  
  32. }
  33.  
  34. string Persona::getRut(){
  35.  
  36.    return rut;
  37.  
  38. }
  39.  
  40. int Persona::getEdad(){
  41.  
  42.    return edad;
  43.  
  44. }
  45.  
  46. void Persona::setHermano(Persona *h){
  47.  
  48.    hermano = h;
  49.  
  50. }
  51.  
  52. Persona Persona::*getHermano(){
  53.  
  54.    return hermano; // Me sale un triangulo con signode exclamacion (o admiracion)
  55.  
  56. }
  57.  
  58.  
  59.  
  60.  

Código
  1. #ifndef PERSONA_H
  2. #define PERSONA_H
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class Persona {
  8. public:
  9.    Persona();
  10.    Persona(string n, string r, int e);
  11.    Persona(const Persona& orig);
  12.    virtual ~Persona();
  13.    string getNombre();
  14.    string getRut();
  15.    int getEdad();
  16.    void setHermano(Persona *h);
  17.    Persona *getHermano();
  18. private:
  19.    string nombre;
  20.    string rut;
  21.    int edad;
  22.    Persona *hermano;
  23. };
  24.  
  25. #endif /* PERSONA_H */
  26.  
  27.  

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char** argv) {
  8.  
  9.    Persona *persona1 = new Persona("Juan","123-K",25);
  10.    Persona *persona2 = new Persona("Pedro","456-L",23);
  11.  
  12.    cout <<"Los datos de la persona 1 son:\n";
  13.    cout <<"\nNombre: " << persona1->getNombre();
  14.    cout <<"\nRut: " << persona1->getRut();
  15.    cout <<"\nEdad: " << persona1->getEdad();
  16.    cout <<"\nLa direccion de su casa es: " << persona1;
  17.  
  18.    cout <<"\n\nLos datos de la persona 2 son:\n";
  19.    cout <<"\nNombre: " << persona2->getNombre();
  20.    cout <<"\nRut: " << persona2->getRut();
  21.    cout <<"\nEdad: " << persona2->getEdad();
  22.    cout <<"\nLa direccion de su casa es: " << persona2;
  23.  
  24.    //Relacionando las dos personas como hermanos
  25.  
  26.    persona1->setHermano(persona2);
  27.    persona2->setHermano(persona1);
  28.  
  29.    cout <<"\n\nEl hermano de la persona 1 se llama: "<< persona1->getHermano()->getNombre();
  30.    cout <<"\n\nEl hermano de la persona 2 se llama: "<< persona2->getHermano()->getNombre();
  31.  
  32.    delete persona1;
  33.    delete persona2;
  34.  
  35.    return 0;
  36. }
  37.  
  38.  
44  Programación / Programación C/C++ / Ayuda con punteros (en C++) (Actualizacion constante con nuevas preguntas) en: 17 Septiembre 2013, 03:24 am
Bueno, soy novato, espero que me puedan ayudar.

Estoy haciendo algunos ejercicios con punteros, cree una clase llamado "Auto" cuyos atributos son la marca, su patente (matricula) y el kilometraje, y en el main hice lo siguiente, cree 2 autos con asignacion automatica y 1 de forma dinamica, pero al momento de que se deben destruir al final del programa, me sale "RUN FAILED", ¿ a que se debera ?, yo en el destructor implemente de tal manera que informe de que se esta destruyendo el objeto.

Les dejo el codigo. Es probable que use este mismo tema para hacer consultas, mi proximo objetivo es practicar con listas enlazadas, ya tengo experiencia pero en Java, pero ahora quiero practicar con punteros.

NOTA 1: Cuando vean el codigo cuando el puntero auto3 apunta a auto2, ¿que sucede con los datos donde apuntaba auto3? , ¿ quedan para siempre en la memoria (a no ser que se reinicie) y tengo que usar delete ?

NOTA 2: Si tengo algun error o tienen una sugerencia, estaria agradecido que me lo dijeran.

Código:
Datos del auto 1

Marca:
Patente:
Kilometraje: 0

Datos del auto 2

Marca: Chevrolet
Patente: ASDF
Kilometraje: 300

Datos del auto3

Marca: Nissan
Patente: QWERT
Kilometraje: 500

Las direcciones de memoria de los autos son:

La direccion de memoria de auto 1 es: 0x22abe8
La direccion de memoria de auto 2 es: 0x22abd0
La direccion de memoria de auto 3 es: 0x22abcc

Ahora, auto3 va a apuntar a la direccion de auto2

La direccion de memoria de auto 3 es: 0x22abd0
La marca es: Chevrolet

Ahora, auto3 va a apuntar a la direccion de auto1

La direccion de memoria de auto 3 es: 0x22abe8
La marca es:


RUN FAILED (exit value 1,, total time: 734ms)




Código
  1. #include "Auto.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Auto::Auto() {
  8.  
  9.    marca = "";
  10.    patente = "";
  11.    kilometraje = 0;
  12.  
  13. }
  14.  
  15. Auto::Auto(string m, string p, double k){
  16.  
  17.    marca = m;
  18.    patente = p;
  19.    kilometraje = k;
  20.  
  21. }
  22.  
  23. Auto::Auto(const Auto& orig) {
  24. }
  25.  
  26. Auto::~Auto() {
  27.  
  28.    cout <<"\nDestruyendo el auto ...";
  29.  
  30. }
  31.  
  32. string Auto::getMarca(){
  33.  
  34.    return marca;
  35.  
  36. }
  37.  
  38. string Auto::getPatente(){
  39.  
  40.    return patente;
  41.  
  42. }
  43.  
  44. double Auto::getKilometraje(){
  45.  
  46.    return kilometraje;
  47.  
  48. }
  49.  
  50.  

Código
  1. #ifndef AUTO_H
  2. #define AUTO_H
  3. #include <string>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. class Auto {
  9. public:
  10.    Auto();
  11.    Auto(string m, string p, double k);
  12.    Auto(const Auto& orig);
  13.    virtual ~Auto();
  14.    string getMarca();
  15.    string getPatente();
  16.    double getKilometraje();
  17. private:
  18.    string marca;
  19.    string patente;
  20.    double kilometraje;
  21. };
  22.  
  23. #endif /* AUTO_H */
  24.  
  25.  

Código
  1. #include <cstdlib>
  2. #include "Auto.h"
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char** argv) {
  8.  
  9.    Auto auto1;
  10.    Auto auto2("Chevrolet","ASDF",300);
  11.    Auto *auto3 = new Auto("Nissan","QWERT",500);
  12.  
  13.    cout <<"Datos del auto 1\n";
  14.    cout <<"\nMarca: " << auto1.getMarca();
  15.    cout <<"\nPatente: " << auto1.getPatente();
  16.    cout <<"\nKilometraje: " << auto1.getKilometraje();
  17.    cout <<"\n\n";
  18.  
  19.    cout <<"Datos del auto 2\n";
  20.    cout <<"\nMarca: " << auto2.getMarca();
  21.    cout <<"\nPatente: " << auto2.getPatente();
  22.    cout <<"\nKilometraje: " << auto2.getKilometraje();
  23.    cout <<"\n\n";
  24.  
  25.    cout <<"Datos del auto3\n";
  26.    cout <<"\nMarca: " << auto3->getMarca();
  27.    cout <<"\nPatente: " << auto3->getPatente();
  28.    cout <<"\nKilometraje: " <<auto3->getKilometraje();
  29.  
  30.    cout <<"\n\nLas direcciones de memoria de los autos son:\n";
  31.    cout <<"\nLa direccion de memoria de auto 1 es: " << &auto1;
  32.    cout <<"\nLa direccion de memoria de auto 2 es: " << &auto2;
  33.    cout <<"\nLa direccion de memoria de auto 3 es: " << &auto3;
  34.  
  35.    cout <<"\n\nAhora, auto3 va a apuntar a la direccion de auto2\n";
  36.    auto3 = &auto2;
  37.    cout <<"\nLa direccion de memoria de auto 3 es: "<< auto3;
  38.    cout <<"\nLa marca es: "<< auto3->getMarca();
  39.  
  40.    cout <<"\n\nAhora, auto3 va a apuntar a la direccion de auto1\n";
  41.    auto3 = &auto1;
  42.    cout <<"\nLa direccion de memoria de auto 3 es: "<< auto3;
  43.    cout <<"\nLa marca es: "<< auto3->getMarca();
  44.    cout <<"\n";
  45.  
  46.    delete auto3;
  47.  
  48.    return 0;
  49.  
  50. }
  51.  
  52.  
45  Programación / Programación C/C++ / Problema al crear arreglos de objetos en C++ en: 15 Septiembre 2013, 12:45 pm
Primero que nada, soy novato en C++, espero poder surgir con la ayuda :D

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
  1. #include "Persona.h"
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. Persona::Persona(string n, string r, int e) {
  8.  
  9.    nombre = n;
  10.    rut = r;
  11.    edad = e;
  12.  
  13. }
  14.  
  15. Persona::Persona(const Persona& orig) {
  16. }
  17.  
  18. Persona::Persona(){
  19.  
  20. }
  21.  
  22. Persona::~Persona() {
  23.  
  24.    cout <<"\nBorrando datos ...";
  25.  
  26. }
  27.  
  28. string Persona::getNombre(){
  29.  
  30.    return nombre;
  31.  
  32. }
  33.  
  34. string Persona::getRut(){
  35.  
  36.    return rut;
  37.  
  38. }
  39.  
  40. int Persona::getEdad(){
  41.  
  42.    return edad;
  43.  
  44. }
  45.  
  46.  

Código
  1. #ifndef PERSONA_H
  2. #define PERSONA_H
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class Persona {
  8. public:
  9.    Persona(string nom, string r, int e);
  10.    Persona();
  11.    Persona(const Persona& orig);
  12.    virtual ~Persona();
  13.    string getNombre();
  14.    string getRut();
  15.    int getEdad();
  16. private:
  17.    string nombre;
  18.    string rut;
  19.    int edad;
  20. };
  21.  
  22. #endif /* PERSONA_H */
  23.  
  24.  

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. using namespace std;
  6.  
  7. void desplegarDatos(Persona *arreglo){
  8.  
  9.    cout <<"\n\nDesplegando datos de las personas\n\n";
  10.  
  11.    for(int i=0; i<3; i++){
  12.  
  13.        cout <<"\nNombre: " << arreglo[i].getNombre();
  14.        cout <<"\nRut: " << arreglo[i].getRut();
  15.        cout <<"\nEdad: " << arreglo[i].getEdad();
  16.        cout <<"\n";
  17.  
  18.    }
  19.  
  20. }
  21.  
  22. int main(int argc, char** argv) {
  23.  
  24.    cout <<"Creando un arreglo de 3 personas";
  25.  
  26.    Persona *personas = new Persona[3];
  27.  
  28.    personas[0] = Persona("Rodrigo","132-K",23);
  29.    personas[1] = Persona("Francisco","342-L",20);
  30.    personas[2] = Persona("Samuel","345-P",21);
  31.  
  32.    desplegarDatos(personas);
  33.  
  34.    delete []personas;
  35.  
  36.    return 0;
  37. }
  38.  
  39.  
46  Programación / Programación C/C++ / Como enviar un fichero como parametro en C++ en: 1 Septiembre 2013, 05:58 am
Hola gente, soy novato en C++, me gustaría que me pudieran ayudar a como mandar por parametro un fichero que abro desde el main.
Lo que quiero es abrir el fichero desde el main, primero comprobar si todo marcha bien, si el fichero no se abrio, el programa avisa que fallo, de lo contrario, manda como parametro a una funcion que se encargara de leer el fichero dentro de un ciclo infinito hasta que no haya mas que extraer del archivo. El fichero tiene este formato

palabra1,palabra2,palabra3,..................................,palabraN

y quiero imprimir cada palabra x cada linea, por eso use getline(fichero,palabra,',');

Pero me salio un error gigante y no pudo funcionar como queria

Les dejo el codigo, estoy usando NetBeans 7.3

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. void leerFichero(ifstream fichero){
  9.  
  10.    string palabra;
  11.  
  12.    while(!fichero.eof()){
  13.  
  14.        getline(fichero,palabra,',');
  15.        cout <<palabra;
  16.  
  17.    }
  18.  
  19. }
  20.  
  21. int main(int argc, char** argv) {
  22.  
  23.    ifstream fichero("personal.txt");
  24.  
  25.    if(fichero.is_open()){
  26.  
  27.        leerFichero(fichero);
  28.  
  29.    }else{
  30.  
  31.        cout <<"\nNo se pudo abrir el fichero";
  32.  
  33.    }
  34.  
  35.    return 0;
  36. }
  37.  
  38.  
47  Foros Generales / Foro Libre / Re: Muere torturado un joven homosexual en Rusia en: 14 Agosto 2013, 06:43 am
Por Dios, en que tiempo vivimos, ¿ aun vivimos en la edad media ?
48  Foros Generales / Foro Libre / ¿ Son importantes las matemáticas en el hacking ? en: 14 Agosto 2013, 06:41 am
La pregunta es clara.

¿ Que tan importante son las matematicas en el hacking ?

Unos me dicen que es ideal para la criptografía, pero, ¿ que otros usos más tienen ?

Por ejemplo, quiero citar algunas matemáticas para que me ayuden en que se usan, supongo que muchos son expertos en el area, espero que me ayuden porfavor.

- Algebra Lineal

- Calculo

- Probabilidades y estadística

- Lenguajes formales

- [[Ingrese otra aquí]]

49  Programación / Java / Re: ¿ Como puedo hacer esto en mi videojuego ? (Mario) en: 6 Agosto 2013, 06:42 am
Citar
Insertar Cita
1- El parpadeo ocurre porque tienes demasiados frames por segundo, procura no pasar de 25 frames/segundo si no quieres que te suceda.

2- La imagen del fondo debes moverla del mismo modo que moverías al personaje activo porque depende de si éste avanza o no:

Un saludo.

Gracias, vere si puedo hacer mover las montañas

Citar
Es posible que tengas que usar una libreria mas poderosa para poder tener mejores resultados gráficos como el openGL

Aunque es una buena idea, me tomare las cosas con calma, pero de todas maneras gracias.
50  Programación / Java / ¿ Como puedo hacer esto en mi videojuego ? (Mario) en: 3 Agosto 2013, 13:40 pm
Estoy creando un juego que simula el Mario World, lo hice por medio de clases (por el momento no quiero poner el codigo todavia), el programa consta de una clase que se llama Mario (el jugador), otra que se llama Control que hereda de un JFrame, es aqui donde se implementa el control por teclado y el menu, y tambien una superclase Escenario que hereda de JPanel y dentro de cada Escenario tiene un wallpaper y "agrega" objetos de la clase Tile (que contiene un sprite y un booleano que indica si es solido o no, para que Mario camine).

Bueno, el problema es lo siguiente, yo implemente en la clase Control un Timer que llama a actionPerformed cada 1 segundo, la razon de esto es para que funcione el cronometro del juego, pero el problema es que cuando llamo a repaint para que actualice, la pantalla "pestañea", y aun no encuentro la solucion, se ve realmente molesto para la vista estar jugando mientras la pantalla pestañea.

Tambien tengo otra duda ¿Como podria "correr" la pantalla cada vez que Mario avanza hacia adelante ? Por que "mas al fondo" cree unas montañas pero no se como correr la vista hacia las montañas.

Aqui una imagen del juego, aun tengo que corregir el sprite de mario

Páginas: 1 2 3 4 [5] 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines