Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/09/2019, 22:32
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 8 meses
Puntos: 6
punteros y array de objetos

Hola a todos, vengo a pedir ayuda con este código porque la verdad estoy trabado con este código de c++, resulta que necesito hacer gestionar los contactos en un array y buscando en internet debo usar punteros.
El código me compila pero no guarda los registros en el array, pongo el código:

Agenda.h

Código C++:
Ver original
  1. #ifndef AGENDA_H
  2. #define AGENDA_H
  3. #include <string>
  4. #include <array>
  5. class Agenda {
  6. private:
  7.     int indice;
  8.     int tamanio;
  9.     Contacto* contactos;
  10. public:
  11.     Agenda();
  12.     Agenda(int maxCont);
  13.     bool anyadirContacto(Contacto objcontacto);
  14.     Contacto* buscarPorNombre(std::string nombre);
  15.     Contacto* buscarPorTelefono(int telefono);
  16.     bool borrarPorNombre(std::string nombre);
  17.     bool modificarPorNombre(std::string nombre, int nuevoTelefono);
  18.     std::string toString();
  19. };
  20. #endif /* AGENDA_H */

Agenda.cpp

Código C++:
Ver original
  1. #include "Contacto.h"
  2. #include "Agenda.h"
  3. #include <iostream>
  4. #include <string>
  5. using namespace std;
  6.  
  7. Agenda::Agenda(){}
  8.  
  9. Agenda::Agenda(int maxCont){
  10.     this->indice = 0;
  11.     this->tamanio = maxCont;
  12.     this->contactos = new Contacto[maxCont];    
  13. }
  14.  
  15. bool Agenda::anyadirContacto(Contacto objcontacto) {
  16.     if(indice < tamanio){
  17.         contactos[indice] = objcontacto;
  18.         indice++;
  19.         return true;
  20.     } else {
  21.         return false;
  22.     }
  23. }
  24.  
  25. string Agenda::toString(){
  26.     cout << "indice: " << indice << "\n";
  27.     string res ="";
  28.     int cont = 1;
  29.     for (int i = 0 ; i < indice; i++) {
  30.         res += "\n Contacto " + std::to_string(cont) + "\n" + contactos[i].toString();
  31.         cont++;
  32.     }
  33.     return res;
  34. }
  35.  
  36. Contacto* Agenda::buscarPorNombre(string nombre) {
  37.     for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) {
  38.         Contacto contacto = this->contactos[i];
  39.         if (&contacto == NULL) {
  40.             string nom = contacto.getNombre();
  41.             if (nom == nombre) {
  42.                 return &contacto;
  43.             }
  44.         }
  45.     }
  46.     return NULL;
  47. }
  48.    
  49. Contacto* Agenda::buscarPorTelefono(int telefono) {
  50.     for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) {
  51.         if (&this->contactos[i] != NULL) {
  52.             int tel = this->contactos[i].getTelefono();
  53.             if (tel == telefono) {
  54.                 return &this->contactos[i];
  55.             }
  56.         }
  57.     }
  58.     return NULL;
  59. }
  60.    
  61. bool Agenda::borrarPorNombre(string nombre ) {
  62.     for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) {
  63.         if(&this->contactos[i] != NULL) {
  64.             string nom = contactos[i].getNombre();
  65.             if(nom == nombre){
  66.                 &(this->contactos[i]) == NULL;
  67.                 return true;
  68.             }
  69.         }
  70.     }
  71.     return false;
  72. }
  73.  
  74. bool Agenda::modificarPorNombre(string nombre, int nuevoTelefono) {
  75.     for (int i = 0 ; i < (sizeof(this->contactos)/sizeof(*this->contactos)); i++) {
  76.         Contacto contacto = this->contactos[i];
  77.         string nom = contacto.getNombre();
  78.         if (nom == nombre) {
  79.             contacto.setTelefono(nuevoTelefono);
  80.             return true;
  81.         }        
  82.     }
  83.     return false;
  84. }

main.cpp

Código C++:
Ver original
  1. #include <cstdlib>
  2. #include "Contacto.h"
  3. #include "Agenda.h"
  4. #include "Mensajes.h"
  5. using namespace std;
  6. /**
  7.     * Código de: http://users.dsic.upv.es/~mpastorg/prg-teleco/cursosPasados/2013-14/tema7/EjercicioAgenda_solucion.pdf
  8.     *
  9.     * 2. Haz una clase llamada Agenda para manejar una agenda de teléfonos. Los
  10.     * objetos instanciados a partir de esa clase tendrán la siguientes funcionalidades:
  11.        - Construir una agenda a partir de un número máximo de contactos
  12.          posibles (constructor)
  13.        - Añadir un contacto nuevo
  14.        - Listar todos los contactos de la agenda
  15.        - Buscar un contacto por nombre
  16.        - Buscar un contacto a partir de un número de teléfono
  17.        - Borrar un teléfono dado un nombre
  18.        - Modificar un número de telefono dado un nombre
  19.        - Puedes añadir más métodos si lo consideras adecuado.
  20.        - Las entradas de la agenda se modelarán mediante objetos de la clase
  21.          Contacto que habrá que crear.
  22.     * Para cada Contacto de la agenda se almacenará la siguiente información:
  23.        - Nombre
  24.        - Dirección
  25.        - Código Postal
  26.        - Teléfono
  27. */
  28. void addContacto(Agenda xagenda);
  29. void buscarXNombre(Agenda xagenda);
  30. void buscarXTelefono(Agenda xagenda);
  31. void borrarXNombre(Agenda xagenda);
  32. void modificarXNombre(Agenda xagenda);
  33. /*--------------------*/
  34. int main(int argc, char** argv) {
  35.     int opcion = -1;
  36.     Agenda* agenda = NULL;
  37.     while(opcion != 0) {
  38.         opcion = Mensajes::requestInt(
  39.             "* Ingrese opción:"
  40.             + std::string("\n1.Crear una agenda nueva")
  41.             + std::string("\n2.Añadir contacto")
  42.             + std::string("\n3.Listar agenda")
  43.             + std::string("\n4.Buscar un contacto por nombre")
  44.             + std::string("\n5.Buscar un contacto por telefono")
  45.             + std::string("\n6.Borrar un contacto por nombre")
  46.             + std::string("\n7.Modificar un telefono por nombre")
  47.             + std::string("\n0.Salir"));
  48.         switch(opcion) {
  49.             case 1: {
  50.                 int tamanio = Mensajes::requestInt("¿tamaño de la agenda?");
  51.                 agenda = new Agenda(tamanio);
  52.                 break;
  53.             }
  54.             case 2: {
  55.                 addContacto(*agenda);
  56.                 break;
  57.             }
  58.             case 3: {
  59.                 Mensajes::messageInfo("CONTACTOS\n" + agenda->toString());
  60.                 break;
  61.             }
  62.             case 4: {
  63.                 buscarXNombre(*agenda);
  64.                 break;
  65.             }
  66.             case 5: {
  67.                 buscarXTelefono(*agenda);
  68.                 break;
  69.             }
  70.             case 6: {
  71.                 borrarXNombre(*agenda);
  72.                 break;
  73.             }
  74.             case 7: {
  75.                 modificarXNombre(*agenda);
  76.                 break;
  77.             }
  78.             case 0: {
  79.                 Mensajes::messageInfo("Gracias por usar este sistema :)");
  80.                 break;
  81.             }
  82.             default: {
  83.                 Mensajes::messageInfo("ERROR! Opción equivocada");
  84.                 break;
  85.             }
  86.         }
  87.     }
  88.     return 0;
  89. }
  90. void addContacto(Agenda xagenda){
  91.     string nombre = Mensajes::requestString("Ingrese nombre: ");
  92.     string direccion = Mensajes::requestString("Ingrese dirección: ");
  93.     int codpos = Mensajes::requestInt("Ingrese código postal: ");
  94.     int telefono = Mensajes::requestInt("Ingrese telefono: ");
  95.     Contacto *c = new Contacto(nombre, direccion, codpos, telefono);
  96.     xagenda.anyadirContacto(*c);
  97. }
  98. void buscarXNombre(Agenda xagenda){
  99.     string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: ");
  100.     Contacto *c = xagenda.buscarPorNombre(nombre);
  101.     if(c != NULL){
  102.         Mensajes::messageInfo(c->toString());
  103.     } else {
  104.         Mensajes::messageInfo("El contacto no existe");
  105.     }
  106. }
  107. void buscarXTelefono(Agenda xagenda){
  108.     int telefono = Mensajes::requestInt("Ingrese telefono para la búsqueda: ");
  109.     Contacto *c = xagenda.buscarPorTelefono(telefono);
  110.     if(c != NULL){
  111.         Mensajes::messageInfo(c->toString());
  112.     } else {
  113.         Mensajes::messageInfo("El contacto no existe");
  114.     }
  115. }
  116. void borrarXNombre(Agenda xagenda){
  117.     string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: ");
  118.     if(xagenda.borrarPorNombre(nombre)){
  119.         Mensajes::messageInfo(nombre + " fue eliminado :(");
  120.     } else {
  121.         Mensajes::messageInfo("El contacto no existe");
  122.     }
  123. }
  124. void modificarXNombre(Agenda xagenda){
  125.     string nombre = Mensajes::requestString("Ingrese nombre para la búsqueda: ");
  126.     int telefono = Mensajes::requestInt("Editar telefono: ");
  127.     xagenda.modificarPorNombre(nombre, telefono);
  128. }

Sinceramente no sé que hacer, espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias