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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con funcion creada para consulta (no funciona)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con funcion creada para consulta (no funciona)  (Leído 2,150 veces)
Gared218

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Duda con funcion creada para consulta (no funciona)
« en: 18 Abril 2016, 06:26 am »

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.

Código:
#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 Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Duda con funcion creada para consulta (no funciona)
« Respuesta #1 en: 18 Abril 2016, 11:33 am »

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 &registro)". 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=015
http://www.minidosis.org/#/actividades/Cpp.PunterosYReferencias.Referencias.vid

Espero que se haya entendido :P


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: Duda con funcion creada para consulta (no funciona)
« Respuesta #2 en: 18 Abril 2016, 13:59 pm »

class_openGL te dio la respuesta, debes hacer algo asi:

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class propietario
  6. {
  7.  private:
  8.            string nombre, domicilio, curp;
  9.            int propiedades, telefono, edad;
  10.  
  11.  public:
  12.  
  13. void captura_nombre(string x){
  14.    nombre=x;}
  15.  
  16. string imprimir_nombre(){
  17. return nombre;}
  18.  
  19. void captura_edad(int x){
  20. edad=x;}
  21.  
  22. int imprimir_edad(){
  23. return(edad);}
  24.  
  25. void captura_telefono(int x){
  26. telefono=x;}
  27.  
  28. int imprimir_telefono(){
  29. return(telefono);}
  30.  
  31. void captura_propiedades(int x){
  32. propiedades=x;}
  33.  
  34. int imprimir_propiedades(){
  35. return(propiedades);}
  36.  
  37. void captura_domicilio(string x){
  38. domicilio=x;}
  39.  
  40. string imprimir_domicilio(){
  41. return(domicilio);}
  42.  
  43. void captura_curp(string x){
  44. curp=x;}
  45.  
  46. string imprimir_curp(){
  47.    return(curp);}
  48. };
  49.  
  50. void reg_pro(propietario *registro){
  51.  
  52.    string nom, domi, curp;
  53.    int edad, propi, tel;
  54.  
  55.    cout<<"Ingrese el nombre: ";
  56.    cin>> nom;
  57.    while(getchar()!='\n');
  58.    cout<<"Ingrese edad: ";
  59.    cin>> edad;
  60.    while(getchar()!='\n');
  61.    cout<<"Ingrese domicilio: ";
  62.    cin>> domi;
  63.    while(getchar()!='\n');
  64.    cout<<"Ingrese telefono: ";
  65.    cin>> tel;
  66.    while(getchar()!='\n');
  67.    cout<<"Ingrese curp: ";
  68.    cin>> curp;
  69.    while(getchar()!='\n');
  70.    cout<<"Ingrese numero de propiedades: ";
  71.    cin>>propi;
  72.    while(getchar()!='\n');
  73.  
  74.    registro->captura_nombre(nom);
  75.    registro->captura_edad(edad);
  76.    registro->captura_domicilio(domi);
  77.    registro->captura_telefono(tel);
  78.    registro->captura_curp(curp);
  79.    registro->captura_propiedades(propi);
  80.  
  81.  
  82. }
  83.  
  84. void con_pro(propietario registro){
  85. int x;
  86. cout<<"Seleccione el campo que desea consultar:" <<endl;
  87. cout<<"1.-Nombre\n2.-Edad\n3.-Domicilio\n4.-Telefono\n5.-Curp\n6.-Propiedades\n";
  88. cin>> x;
  89. switch (x){
  90. case 1:
  91.    cout<<"Nombre: ";
  92.    cout<<registro.imprimir_nombre();
  93.    break;
  94. case 2:
  95.    cout<<"Edad: "<<registro.imprimir_edad();
  96.    break;
  97. case 3:
  98.    cout<<"Domicilio: "<<registro.imprimir_domicilio();
  99.    break;
  100. case 4:
  101.    cout<<"Telefono: "<<registro.imprimir_domicilio();
  102.    break;
  103. case 5:
  104.    cout<<"Curp: "<<registro.imprimir_curp();
  105.    break;
  106. case 6:
  107.    cout<<"Propiedades: "<<registro.imprimir_propiedades();
  108.    break;
  109. default:
  110.    break;
  111. }
  112.  
  113. }
  114.  
  115. int main()
  116.    {
  117.    propietario registro;
  118.    int x;
  119.  
  120.        cout << "Usted desea acceder a:"  << endl  << endl
  121.             << "1-Propietario"  << endl
  122.     << "2-Difunto"  << endl
  123.     << "3-Propiedades"  << endl
  124.     << "4-Salir";
  125.        cin >> x;
  126.  
  127.    switch(x){
  128.  
  129.        case 1:
  130.  
  131.            reg_pro(&registro);
  132.            con_pro(registro);
  133.            break;
  134.        }
  135. }
  136.  


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 Desconectado

Mensajes: 2


Ver Perfil
Re: Duda con funcion creada para consulta (no funciona)
« Respuesta #3 en: 24 Abril 2016, 15:27 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines