Autor
|
Tema: Duda con funcion creada para consulta (no funciona) (Leído 2,150 veces)
|
Gared218
Desconectado
Mensajes: 2
|
Hola, disculparan las molestias pero tengo una duda que probablemente para los expertos les parezca simple pero yo no dejo de darle vueltas... la cuestión es que en el código que les dejare por aquí que consiste en crear un usuario con sus respectivos datos para posteriormente esos datos poder consultarlos, modificarlos y eliminarlos me pareció sencillo en un comienzo jeje... pero me atoré en la función de "consulta" ya que no me permite ver la información que supuestamente ya esta almacenada en las variables del objeto "registro" lo extraño es que si pongo las funciones miembro para imprimir los datos dentro de la función "reg_pro" si me las imprime en pantalla pero si las funciones miembro las coloco dentro de la función de para consultar no funciona. Los datos solo deben permanecer en el tiempo de la ejecución aun no veo bases de datos o ficheros... leí que las variables de una función se reinician al terminar la funcion pero no estoy seguro de si una clase o mas bien el objeto que contiene dicha clase cuente como una "función" intente usar variables static pero no logré nada jeje espero me puedan echar un cable con esto. De antemano gracias. #include <iostream> #include <string> using namespace std; class propietario { private: string nombre, domicilio, curp; int propiedades, telefono, edad; public: void captura_nombre(string x){ nombre=x;} string imprimir_nombre(){ return nombre;} void captura_edad(int x){ edad=x;} int imprimir_edad(){ return(edad);} void captura_telefono(int x){ telefono=x;} int imprimir_telefono(){ return(telefono);} void captura_propiedades(int x){ propiedades=x;} int imprimir_propiedades(){ return(propiedades);} void captura_domicilio(string x){ domicilio=x;} string imprimir_domicilio(){ return(domicilio);} void captura_curp(string x){ curp=x;} string imprimir_curp(){ return(curp);} }; void reg_pro(propietario registro){ string nom, domi, curp; int edad, propi, tel; cout<<"Ingrese el nombre: "; cin>> nom; cout<<"Ingrese edad: "; cin>> edad; cout<<"Ingrese domicilio: "; cin>> domi; cout<<"Ingrese telefono: "; cin>> tel; cout<<"Ingrese curp: "; cin>> curp; cout<<"Ingrese numero de propiedades: "; cin>>propi; registro.captura_nombre(nom); registro.captura_edad(edad); registro.captura_domicilio(domi); registro.captura_telefono(tel); registro.captura_curp(curp); registro.captura_propiedades(propi); } void con_pro(propietario registro){ int x; cout<<"Seleccione el campo que desea consultar:" <<endl; cout<<"1.-Nombre\n2.-Edad\n3.-Domicilio\n4.-Telefono\n5.-Curp\n6.-Propiedades\n"; cin>> x; switch (x){ case 1: cout<<"Nombre: "; cout<<registro.imprimir_nombre(); break; case 2: cout<<"Edad: "<<registro.imprimir_edad(); break; case 3: cout<<"Domicilio: "<<registro.imprimir_domicilio(); break; case 4: cout<<"Telefono: "<<registro.imprimir_domicilio(); break; case 5: cout<<"Curp: "<<registro.imprimir_curp(); break; case 6: cout<<"Propiedades: "<<registro.imprimir_propiedades(); break; default: break; } } int main() { propietario registro; int x; cout << "Usted desea acceder a:\n"; cout << "1-Propietario\n2-Difunto\n3-Propiedades\n4-Salir\n"; cin >> x; switch(x){ case 1: reg_pro(registro); con_pro(registro); }
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
En la función "void reg_pro(propietario registro)" estás pasando una estructura que modificas en la función, sin embargo, cuando tu pasas una estructura como parámetro, lo que pasas es una copia, es decir, se copian todos los datos de la estructura para cada llamada de la función. Para modificar un parámetro, tienes que pasar la estructura por referencia, es decir, tendrías que modificar la función por "void reg_pro(propietario ®istro)". Lo que haces al añadir un & es decirle al compilador que el parámetro registro se refiere al objeto que pasas como parámetro, vamos, que los cambios que hagas a la estructura de la función, se los harás en realidad al valor que hayas pasado como parámetro. Si quieres indagar más sobre las referencias en C++, te aconsejo que te mires estos links: http://c.conclase.net/curso/?cap=015http://www.minidosis.org/#/actividades/Cpp.PunterosYReferencias.Referencias.vidEspero que se haya entendido
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
HardForo
Desconectado
Mensajes: 219
HardForo.com
|
class_openGL te dio la respuesta, debes hacer algo asi: #include <iostream> #include <string> using namespace std; class propietario { private: string nombre, domicilio, curp; int propiedades, telefono, edad; public: void captura_nombre(string x){ nombre=x;} string imprimir_nombre(){ return nombre;} void captura_edad(int x){ edad=x;} int imprimir_edad(){ return(edad);} void captura_telefono(int x){ telefono=x;} int imprimir_telefono(){ return(telefono);} void captura_propiedades(int x){ propiedades=x;} int imprimir_propiedades(){ return(propiedades);} void captura_domicilio(string x){ domicilio=x;} string imprimir_domicilio(){ return(domicilio);} void captura_curp(string x){ curp=x;} string imprimir_curp(){ return(curp);} }; void reg_pro(propietario *registro){ string nom, domi, curp; int edad, propi, tel; cout<<"Ingrese el nombre: "; cin>> nom; while(getchar()!='\n'); cout<<"Ingrese edad: "; cin>> edad; while(getchar()!='\n'); cout<<"Ingrese domicilio: "; cin>> domi; while(getchar()!='\n'); cout<<"Ingrese telefono: "; cin>> tel; while(getchar()!='\n'); cout<<"Ingrese curp: "; cin>> curp; while(getchar()!='\n'); cout<<"Ingrese numero de propiedades: "; cin>>propi; while(getchar()!='\n'); registro->captura_nombre(nom); registro->captura_edad(edad); registro->captura_domicilio(domi); registro->captura_telefono(tel); registro->captura_curp(curp); registro->captura_propiedades(propi); } void con_pro(propietario registro){ int x; cout<<"Seleccione el campo que desea consultar:" <<endl; cout<<"1.-Nombre\n2.-Edad\n3.-Domicilio\n4.-Telefono\n5.-Curp\n6.-Propiedades\n"; cin>> x; switch (x){ case 1: cout<<"Nombre: "; cout<<registro.imprimir_nombre(); break; case 2: cout<<"Edad: "<<registro.imprimir_edad(); break; case 3: cout<<"Domicilio: "<<registro.imprimir_domicilio(); break; case 4: cout<<"Telefono: "<<registro.imprimir_domicilio(); break; case 5: cout<<"Curp: "<<registro.imprimir_curp(); break; case 6: cout<<"Propiedades: "<<registro.imprimir_propiedades(); break; default: break; } } int main() { propietario registro; int x; cout << "Usted desea acceder a:" << endl << endl << "1-Propietario" << endl << "2-Difunto" << endl << "3-Propiedades" << endl << "4-Salir"; cin >> x; switch(x){ case 1: reg_pro(®istro); con_pro(registro); break; } }
Al pasar un puntero, usas otros operadores como -> con estructuras excepto quieras hacer algo asi: (*registro).captura_nombre(nom); Te cambié un poco el uso de cout en el main() para que veas que puede quedar un poco mas legible si lo usas multilinea PD: fijate que es necesario limpiar el buffer de teclado.
|
|
« Última modificación: 18 Abril 2016, 15:13 pm por boctulus »
|
En línea
|
HardForo: foro de Hardware y programación Se buscan Mods y colaboradores *
|
|
|
Gared218
Desconectado
Mensajes: 2
|
Hola de nuevo, disculpen la demora simplemente respondo para agradecer a ambos por su aporte me sirvió muchísimo, partiendo de sus aportes y estudiándolos logré no solo resolver mi problema (eso lo hicieron ustedes en primera instancia) si no que logre comprender muchas cosas lo cual me permitió abordar los temas que seguían de una mejor manera así que simplemente eso, gracias . PD: Para los que quieran probar el código que proporcionaron arriba solo agreguen la librería <stdio.h> que creo que se le pasó al compañero XD
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Funcion global creada por mi [CodeIgniter]
Desarrollo Web
|
Shell Root
|
6
|
5,804
|
4 Febrero 2012, 02:17 am
por [u]nsigned
|
|
|
Duda funcion "SYSTEM", ¿porque funciona con unos comandos y con otros no?
Programación C/C++
|
BlerofonT
|
8
|
17,895
|
10 Julio 2012, 12:09 pm
por HdM
|
|
|
Funcion para validar formulario en Firefox no funciona
Desarrollo Web
|
Crash_RPM
|
6
|
9,354
|
26 Agosto 2014, 18:14 pm
por #!drvy
|
|
|
Consulta - Llamar función dentro de su misma función
Programación C/C++
|
DeMoNcRaZy
|
4
|
5,801
|
8 Marzo 2015, 17:29 pm
por DeMoNcRaZy
|
|
|
(Consulta) La función para pausar el thread principal en C++11 Standard no vale
Programación C/C++
|
Seyro97
|
3
|
2,157
|
11 Noviembre 2015, 16:25 pm
por class_OpenGL
|
|