Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: elkiy en 21 Febrero 2013, 21:37 pm



Título: [Aporte] Mostrar valor de variables privadas
Publicado por: elkiy en 21 Febrero 2013, 21:37 pm
Estaba estudiando y de repente me encontre con el problema de las variables privadas, funciones privadas y todo eso, como me resultó muy dificil entenderlo luego de aver probado varias veces lo entendí, asi que les dejo este programa que hice como ejemplo y mas abajo las aclaraciones.

Ejemplo

Main.cpp

Código
  1. #include <iostream>
  2. using std::cin;
  3. #include "Funciones.h"
  4.  
  5. int main()
  6. {
  7. Funciones Objeto;
  8. Objeto.PedirNombre();
  9. Objeto.PedirNumeros();
  10. Objeto.DecirNumeros();
  11. return 0;
  12. }
  13.  

Funciones.cpp

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. using std::cin;
  5. using std::fixed;
  6.  
  7. #include <string>
  8. using std::string;
  9. using std::getline;
  10.  
  11. #include <iomanip>
  12. using std::setprecision;
  13.  
  14. #include "Funciones.h"
  15.  
  16. void Funciones::PedirNombre()
  17. {
  18. cout << "Ingrese su nombre: ";
  19. string Nombre;
  20. getline (cin , Nombre);
  21. cout << "\nBienvenido " << Nombre << endl;
  22. NombreUsuario = Nombre;
  23. }
  24. void Funciones::PedirNumeros()
  25. {
  26.    cout << "Bueno " << NombreUsuario << " vamos a hacer unas cuentas" << endl;
  27. cout << "Vamos a tener 3 numeros, dos numeros del tipo entero y el otro con decimales"
  28. << endl;
  29. cout << "Empeza a ingresar los numeros: \n"
  30. << "Primero numero entero: ";
  31. cin >> numero1;
  32. cout <<"\nSegundo numero entero: ";
  33. cin >> numero2;
  34. cout << "\nTercer numero, que contenga decimales: ";
  35. cin >> numero3;
  36. cin.get();
  37. }
  38.  
  39. void Funciones::DecirNumeros()
  40. {
  41. cout << "\nLos numeros Ingresados son:\n";
  42. cout << numero3 <<" " << numero2 << " " << numero1 << " " << endl;
  43. cout << "Vamos a hacer que " << numero3 << " sea igual a:\n "
  44. << numero1 << " dividido " << numero2;
  45. cout << " el resultado seria: " << numero1 / numero2;
  46. cout << " como ve se perdio los decimales, ahora no se perderan\n";
  47. numero3= static_cast<double>(numero1) / numero2;
  48. cout << "Resultado Original: " << setprecision(2) << fixed << numero3 << endl;
  49. Terminar(); // llamo a la funcion que si va a devolver el valor
  50. cin.get();
  51. }
  52.  
  53. void Funciones::Terminar()
  54. {
  55. cout << "Gracias: " << NombreUsuario; // imprimo el valor desde una funcion private
  56. cin.get();
  57. }

Funciones.h

Código
  1. #include <iostream>
  2. #include <string>
  3. using std::string;
  4.  
  5. class Funciones
  6. {
  7. public:
  8. void PedirNombre();
  9. void PedirNumeros();
  10. void DecirNumeros();
  11. int numero1;
  12. int numero2;
  13. double numero3;
  14. private:
  15. string NombreUsuario; // una misma variable
  16. void Terminar(); // la funcion que hice
  17. };
  18.  

A tener en cuenta:

Desde una funcion publica se puede cambiar el valor de una variable privada
Desde una una funcion publica se puede mostrar el valor de una variable privada
Desde una funcion publica se puede llamar a una funcion privada
Desde una funcion privada se puede cambiar el valor y mostrar el valor de una variable privada


Título: Re: [Aporte] Mostrar valor de variables privadas
Publicado por: amchacon en 21 Febrero 2013, 22:02 pm
Desde una una funcion publica no se puede mostrar el valor de una variable privada
Falso, esta sentencia es totalmente válida:

Código
  1. class Ejemplo
  2. {
  3. private:
  4.            int Variable;
  5. public:
  6.           int ObtenerVariable(){ return Variable;}
  7. };

El problema es mucho más sutil que eso:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4.  
  5. #include <string>
  6. using std::string;
  7. using std::getline;
  8.  
  9. #include "cabezal.h"
  10.  
  11. tunombrefuncion::tunombrefuncion(string nombre)
  12. {
  13. Establecernombre(nombre);
  14. }
  15. void tunombrefuncion::Establecernombre(string Enombre)
  16. {
  17.   if (Enombre.length() <= 25)
  18.   {
  19.      nombrepersona = Enombre;
  20.   }
  21.   else
  22.   {
  23.      Enombre.substr (0 , 25);
  24.      nombrepersona = Enombre;
  25.   }
  26. }
  27. string Darnombre()
  28. {
  29.  return nombrepersona;

Te falta una llave al final. Además tendrías que escribir string tunombrefuncion::DarNombre()


Título: Re: [Aporte] Mostrar valor de variables privadas
Publicado por: elkiy en 21 Febrero 2013, 22:08 pm
Falso, esta sentencia es totalmente válida:

Código
  1. class Ejemplo
  2. {
  3. private:
  4.            int Variable;
  5. public:
  6.           int ObtenerVariable(){ return Variable;}
  7. };

El problema es mucho más sutil que eso:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4.  
  5. #include <string>
  6. using std::string;
  7. using std::getline;
  8.  
  9. #include "cabezal.h"
  10.  
  11. tunombrefuncion::tunombrefuncion(string nombre)
  12. {
  13. Establecernombre(nombre);
  14. }
  15. void tunombrefuncion::Establecernombre(string Enombre)
  16. {
  17.   if (Enombre.length() <= 25)
  18.   {
  19.      nombrepersona = Enombre;
  20.   }
  21.   else
  22.   {
  23.      Enombre.substr (0 , 25);
  24.      nombrepersona = Enombre;
  25.   }
  26. }
  27. string Darnombre()
  28. {
  29.  return nombrepersona;

Te falta una llave al final. Además tendrías que escribir string tunombrefuncion::DarNombre()
si se que me falta una llave hay y eso de escribir string, lo mas importante son los errores que me tiraba, estas seguro de que se puede hacer esto? y con cualquier tipo de variable, si es asi es muy raro porque me tiraba error en eso. :(


Título: Re: [Aporte] Mostrar valor de variables privadas
Publicado por: elkiy en 21 Febrero 2013, 22:17 pm
si se que me falta una llave hay y eso de escribir string, lo mas importante son los errores que me tiraba, estas seguro de que se puede hacer esto? y con cualquier tipo de variable, si es asi es muy raro porque me tiraba error en eso. :(

EDIT: me fijé recien y se puede ahora lo edito :D


Título: Re: [Aporte] Mostrar valor de variables privadas
Publicado por: anonimo12121 en 21 Febrero 2013, 22:49 pm
repasate la sección clases , public privadas y protected lo que no podrias hacer con las privadas es llamarlas externamente