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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++] Buscar un dato privado en un vector de clase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++] Buscar un dato privado en un vector de clase  (Leído 6,248 veces)
Rockmore

Desconectado Desconectado

Mensajes: 18



Ver Perfil
[C++] Buscar un dato privado en un vector de clase
« en: 5 Marzo 2011, 21:19 pm »

Saludos. Puede que el título no esté muy claro, así que explicaré cuál es el problema que me ha traído:

En una clase Agenda he de crear un método mediante el cual el usuario introduzca un nombre y el programa muestre todos los datos del vector en los que se encuentre ese nombre. El caso es que el nombre se encuentra en otra clase distinta, y no podemos hacer amigos. Busqué información y descubrí que es posible hacerlo con los métodos get y set, pero no sé cómo aplicarlos.

Aquí pongo parte del código:
Código
  1. class Contacto
  2. {
  3. private:
  4.    string nombre, apellidos;
  5.    FechaNacimiento fnac1;
  6.    Direccion dir1;
  7. public:
  8.    void Mostrar(void)
  9.    {
  10.        cout<<"Nombre: "<<nombre<<endl;
  11.        cout<<"Apellidos: "<<apellidos<<endl;
  12.        fnac1.Mostrar();
  13.        dir1.Mostrar();
  14.    }
  15.    void Solicitar(void)
  16.    {
  17.        cout<<"Nombre: ";
  18.        getline(cin,nombre);
  19.        cout<<"Apellidos: ";
  20.        getline(cin,apellidos);
  21.        fnac1.Solicitar();
  22.        dir1.Solicitar();
  23.    }
  24. };
  25.  
  26. class Agenda
  27. {
  28. private:
  29.    int N;
  30.    Contacto lista1[NMAX];
  31.    string buscar;
  32.    bool exito;
  33. public:
  34.    Agenda(void)
  35.    {
  36.        N=-1;
  37.        exito=false;
  38.    }
  39.    void NuevoContacto(void)
  40.    {
  41.        N++;
  42.        lista1[N].Solicitar();
  43.    }
  44. //...
  45. //Codigo entre medias
  46. //...
  47.    void BuscarContacto(void)
  48.    {
  49.        cout<<"Nombre a buscar: ";
  50.        getline(cin,buscar);
  51.        for(int j=0;j<N;j++)
  52.        {
  53.            if(lista1[j].nombre==buscar)//Esta condicion no es correcta
  54.            {
  55.                lista1[j].Mostrar();
  56.                exito=true;//Centinela de contacto encontrado
  57.            }
  58.        }
  59.        if(exito==false)
  60.        {
  61.            cout<<"Contacto no encontrado"<<endl;
  62.        }
  63.    }
  64. };


En línea

Edu


Desconectado Desconectado

Mensajes: 1.082


Ex XXX-ZERO-XXX


Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #1 en: 5 Marzo 2011, 21:24 pm »

Si eso del get y set sirve para hacerlo mas formal y mantener privado el campo q usas para poner los nombres.
Pero puedes solamente poner publica la variable q quieres tomar de otro lado y podras modificarla igual.

pd: Ah pero tienes q instanciar la clase primero, yo se C# espero q no este metiendo la pata..


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #2 en: 5 Marzo 2011, 23:07 pm »

Si te está permitido, qué tal añadir un método público en "Contacto" que te devuelva el string nombre, por ejemplo. Creo que es la opción más simple después de un método friend.
En línea

Rockmore

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #3 en: 6 Marzo 2011, 12:12 pm »

Saludos. Gracias por las aportaciones. Por un lado, los atributos deben ser todos privados, así que no puedo hacer ese público. Por otro lado, añadí un método público en "Contacto" que me devolviera el string nombre. Así no tengo errores de compilación ni de ejecución, sin embargo, es posible que no lo haya creado bien, pues cuando voy a buscar un contacto que he añadido, no me encuentra nada. Ni siquiera me salta el centinela, pues me dice "Contacto no encontrado".
Código
  1. class Contacto
  2. {
  3. private:
  4.    string nombre, apellidos;
  5.    FechaNacimiento fnac1;
  6.    Direccion dir1;
  7. public:
  8.    string VerNombre(void)
  9.    {
  10.        return(nombre);
  11.    }
  12.  
  13.    void Mostrar(void)
  14.    {
  15.        cout<<"Nombre: "<<nombre<<endl;
  16.        cout<<"Apellidos: "<<apellidos<<endl;
  17.        fnac1.Mostrar();
  18.        dir1.Mostrar();
  19.        return;
  20.    }
  21.    void Solicitar(void)
  22.    {
  23.        cout<<"Nombre: ";
  24.        getline(cin,nombre);
  25.        cout<<"Apellidos: ";
  26.        getline(cin,apellidos);
  27.        fnac1.Solicitar();
  28.        dir1.Solicitar();
  29.        return;
  30.    }
  31. };
  32.  
  33. class Agenda
  34. {
  35. private:
  36.    int N;
  37.    Contacto lista1[NMAX];
  38.    string buscar,comparar;
  39.    bool exito;
  40. public:
  41.    Agenda(void)
  42.    {
  43.        N=-1;
  44.        exito=false;
  45.    }
  46.    void NuevoContacto(void)
  47.    {
  48.        N++;
  49.        lista1[N].Solicitar();
  50.        return;
  51.    }
  52.    void ListarContactos(void)
  53.    {
  54.        if(N<0)
  55.        {
  56.            cout<<"No hay contactos guardados"<<endl;
  57.            getche();
  58.        }
  59.        else
  60.        {
  61.            for(int i=0;i<=N;i++)
  62.            {
  63.                cout<<"Contacto n. "<<i+1<<endl;
  64.                lista1[i].Mostrar();
  65.                getche();
  66.            }
  67.        }
  68.        return;
  69.    }
  70.    void BuscarContacto(void)
  71.    {
  72.        cout<<"Nombre a buscar: ";
  73.        getline(cin,buscar);
  74.        for(int j=0;j<N;j++)
  75.        {
  76.            comparar=lista1[j].VerNombre();
  77.            if(buscar==comparar)
  78.            {
  79.                lista1[j].Mostrar();
  80.                exito=true;
  81.            }
  82.        }
  83.        if(exito==false)
  84.        {
  85.            cout<<"Contacto no encontrado"<<endl;
  86.        }
  87.        return;
  88.    }
  89. };
En línea

punk_day22

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #4 en: 9 Marzo 2011, 13:01 pm »

Hey tio he conseguido hacerlo con memoria estatica  de todas formas me compila y me funciona canviando ciertas cosas de tu codigo, mañana si puedo te pongo el codigo q aun no lo he completado ^^

pd: eres de la universidad de alicante? por q estoi haciendo una practica identica :P, saludos=) 
En línea

Rockmore

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #5 en: 10 Marzo 2011, 17:27 pm »

Pues sí, soy de la UA, del grupo de tarde de teleco. Me has pillado. Pues espero tu código, que a mí se me ha secado el cerebro.
En línea

punk_day22

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #6 en: 10 Marzo 2011, 17:44 pm »

//Basicamente es lo mismo solo que los atributos que tienes como privado no van hay, pasalos a ponerlos en el metodo como te lo pongo ^^ en realidad era una tonteria


void buscar(void){
        string comparar;
        string buscarnombre;
        bool exito;

        cout<<"Nombre a buscar";


        getline(cin,buscarnombre);
        for(int i=0;i<N;i++){
            comparar=contactos.VerNombre();
            if(buscarnombre==comparar){
                contactos.mostrarcontacto();
                exito=true;
            }

        }
        if(exito==false){
            cout << "Contacto no encontrado" << endl;
        }
        return;
    }
En línea

Rockmore

Desconectado Desconectado

Mensajes: 18



Ver Perfil
Re: [C++] Buscar un dato privado en un vector de clase
« Respuesta #7 en: 10 Marzo 2011, 18:13 pm »

Bueno, ya está resuelto. El error estaba en que inicializaba N en -1, para luego añadirle 1 antes de crear un contacto nuevo. Queda solucionado inicializando N en 0 y añadirle 1 DESPUES de crear el contacto.

Código
  1. class Agenda{
  2. private:
  3.    int N;
  4.    Contacto lista1[NMAX];
  5. public:
  6.    //Constructor por defecto
  7.    Agenda(void){
  8.        N=0;
  9.    }
  10.    //Metodo anyadir contacto
  11.    void NuevoContacto(void){        
  12.        lista1[N].Solicitar();
  13.        N++;
  14.        return;
  15.    }
  16.    //Metodo muestra de contactos
  17.    void ListarContactos(void){
  18.        //Condicion de vector Contacto vacio
  19.        if(N<0){
  20.            cout<<"No hay contactos guardados"<<endl;
  21.            getche();
  22.        }
  23.        else{
  24.            for(int i=0;i<=N;i++){
  25.                cout<<"Contacto n. "<<i+1<<endl;
  26.                lista1[i].Mostrar();
  27.                getche();
  28.            }
  29.        }
  30.        return;
  31.    }
  32.    //Metodo busqueda de contactos
  33.    void BuscarContacto(void){
  34.        string buscar,comparar;
  35.        bool exito=false;
  36.        cout<<"Nombre a buscar: ";
  37.        getline(cin,buscar);
  38.        for(int j=0;j<N;j++){
  39.            //Busqueda de comparador
  40.            comparar=lista1[j].VerNombre();
  41.            //Comprobante
  42.            cout<<comparar<<endl;
  43.            //Comparador de nombres
  44.            if(buscar==comparar){
  45.                lista1[j].Mostrar();
  46.                //Centinela de contacto encontrado
  47.                exito=true;
  48.            }
  49.        }
  50.        if(exito==false){
  51.            cout<<"Contacto no encontrado"<<endl;
  52.        }
  53.        return;
  54.    }
  55. };

De todos modos, gracias por las ideas  ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Creación del tipo de dato float, implementación de la clase
Desarrollo Web
jhonatanAsm 7 5,131 Último mensaje 16 Agosto 2011, 15:56 pm
por jhonatanAsm
FILE * como dato miembro de una clase (C++)
Programación C/C++
oPen syLar 2 3,627 Último mensaje 18 Octubre 2011, 17:48 pm
por oPen syLar
(Resuelto) Buscar un dato numerico con LIKE SQL SERVER 2005
Bases de Datos
Zeroql 1 5,159 Último mensaje 22 Febrero 2012, 03:30 am
por Zeroql
clase Vector
Java
m@o_614 1 1,943 Último mensaje 5 Junio 2012, 22:41 pm
por тαптяα
VB6 - Find - Buscar dato en access
Programación Visual Basic
maxotux 5 3,222 Último mensaje 27 Noviembre 2012, 19:28 pm
por HdM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines