Autor
|
Tema: [C++] Buscar un dato privado en un vector de clase (Leído 6,280 veces)
|
Rockmore
Desconectado
Mensajes: 18
|
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: class Contacto { private: string nombre, apellidos; FechaNacimiento fnac1; Direccion dir1; public: void Mostrar(void) { cout<<"Nombre: "<<nombre<<endl; cout<<"Apellidos: "<<apellidos<<endl; fnac1.Mostrar(); dir1.Mostrar(); } void Solicitar(void) { cout<<"Nombre: "; getline(cin,nombre); cout<<"Apellidos: "; getline(cin,apellidos); fnac1.Solicitar(); dir1.Solicitar(); } }; class Agenda { private: int N; Contacto lista1[NMAX]; string buscar; bool exito; public: Agenda(void) { N=-1; exito=false; } void NuevoContacto(void) { N++; lista1[N].Solicitar(); } //... //Codigo entre medias //... void BuscarContacto(void) { cout<<"Nombre a buscar: "; getline(cin,buscar); for(int j=0;j<N;j++) { if(lista1[j].nombre==buscar)//Esta condicion no es correcta { lista1[j].Mostrar(); exito=true;//Centinela de contacto encontrado } } if(exito==false) { cout<<"Contacto no encontrado"<<endl; } } };
|
|
|
En línea
|
|
|
|
Edu
Desconectado
Mensajes: 1.082
Ex XXX-ZERO-XXX
|
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
Mensajes: 823
|
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
Mensajes: 18
|
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". class Contacto { private: string nombre, apellidos; FechaNacimiento fnac1; Direccion dir1; public: string VerNombre(void) { return(nombre); } void Mostrar(void) { cout<<"Nombre: "<<nombre<<endl; cout<<"Apellidos: "<<apellidos<<endl; fnac1.Mostrar(); dir1.Mostrar(); return; } void Solicitar(void) { cout<<"Nombre: "; getline(cin,nombre); cout<<"Apellidos: "; getline(cin,apellidos); fnac1.Solicitar(); dir1.Solicitar(); return; } }; class Agenda { private: int N; Contacto lista1[NMAX]; string buscar,comparar; bool exito; public: Agenda(void) { N=-1; exito=false; } void NuevoContacto(void) { N++; lista1[N].Solicitar(); return; } void ListarContactos(void) { if(N<0) { cout<<"No hay contactos guardados"<<endl; getche(); } else { for(int i=0;i<=N;i++) { cout<<"Contacto n. "<<i+1<<endl; lista1[i].Mostrar(); getche(); } } return; } void BuscarContacto(void) { cout<<"Nombre a buscar: "; getline(cin,buscar); for(int j=0;j<N;j++) { comparar=lista1[j].VerNombre(); if(buscar==comparar) { lista1[j].Mostrar(); exito=true; } } if(exito==false) { cout<<"Contacto no encontrado"<<endl; } return; } };
|
|
|
En línea
|
|
|
|
punk_day22
Desconectado
Mensajes: 2
|
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 , saludos=)
|
|
|
En línea
|
|
|
|
Rockmore
Desconectado
Mensajes: 18
|
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
Mensajes: 2
|
//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
Mensajes: 18
|
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. class Agenda{ private: int N; Contacto lista1[NMAX]; public: //Constructor por defecto Agenda(void){ N=0; } //Metodo anyadir contacto void NuevoContacto(void){ lista1[N].Solicitar(); N++; return; } //Metodo muestra de contactos void ListarContactos(void){ //Condicion de vector Contacto vacio if(N<0){ cout<<"No hay contactos guardados"<<endl; getche(); } else{ for(int i=0;i<=N;i++){ cout<<"Contacto n. "<<i+1<<endl; lista1[i].Mostrar(); getche(); } } return; } //Metodo busqueda de contactos void BuscarContacto(void){ string buscar,comparar; bool exito=false; cout<<"Nombre a buscar: "; getline(cin,buscar); for(int j=0;j<N;j++){ //Busqueda de comparador comparar=lista1[j].VerNombre(); //Comprobante cout<<comparar<<endl; //Comparador de nombres if(buscar==comparar){ lista1[j].Mostrar(); //Centinela de contacto encontrado exito=true; } } if(exito==false){ cout<<"Contacto no encontrado"<<endl; } return; } };
De todos modos, gracias por las ideas
|
|
|
En línea
|
|
|
|
|
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,165
|
16 Agosto 2011, 15:56 pm
por jhonatanAsm
|
|
|
FILE * como dato miembro de una clase (C++)
Programación C/C++
|
oPen syLar
|
2
|
3,688
|
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,164
|
22 Febrero 2012, 03:30 am
por Zeroql
|
|
|
clase Vector
Java
|
m@o_614
|
1
|
1,953
|
5 Junio 2012, 22:41 pm
por тαптяα
|
|
|
VB6 - Find - Buscar dato en access
Programación Visual Basic
|
maxotux
|
5
|
3,231
|
27 Noviembre 2012, 19:28 pm
por HdM
|
|