[Aporte] Mostrar valor de variables privadas

Iniciado por elkiy, 21 Febrero 2013, 21:37 PM

0 Miembros y 1 Visitante están viendo este tema.

elkiy

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 (cpp) [Seleccionar]
#include <iostream>
using std::cin;
#include "Funciones.h"

int main()
{
Funciones Objeto;
Objeto.PedirNombre();
Objeto.PedirNumeros();
Objeto.DecirNumeros();
return 0;
}


Funciones.cpp

Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
using std::fixed;

#include <string>
using std::string;
using std::getline;

#include <iomanip>
using std::setprecision;

#include "Funciones.h"

void Funciones::PedirNombre()
{
cout << "Ingrese su nombre: ";
string Nombre;
getline (cin , Nombre);
cout << "\nBienvenido " << Nombre << endl;
NombreUsuario = Nombre;
}
void Funciones::PedirNumeros()
{
   cout << "Bueno " << NombreUsuario << " vamos a hacer unas cuentas" << endl;
cout << "Vamos a tener 3 numeros, dos numeros del tipo entero y el otro con decimales"
<< endl;
cout << "Empeza a ingresar los numeros: \n"
<< "Primero numero entero: ";
cin >> numero1;
cout <<"\nSegundo numero entero: ";
cin >> numero2;
cout << "\nTercer numero, que contenga decimales: ";
cin >> numero3;
cin.get();
}

void Funciones::DecirNumeros()
{
cout << "\nLos numeros Ingresados son:\n";
cout << numero3 <<" " << numero2 << " " << numero1 << " " << endl;
cout << "Vamos a hacer que " << numero3 << " sea igual a:\n "
<< numero1 << " dividido " << numero2;
cout << " el resultado seria: " << numero1 / numero2;
cout << " como ve se perdio los decimales, ahora no se perderan\n";
numero3= static_cast<double>(numero1) / numero2;
cout << "Resultado Original: " << setprecision(2) << fixed << numero3 << endl;
Terminar(); // llamo a la funcion que si va a devolver el valor
cin.get();
}

void Funciones::Terminar()
{
cout << "Gracias: " << NombreUsuario; // imprimo el valor desde una funcion private
cin.get();
}


Funciones.h

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
using std::string;

class Funciones
{
public:
void PedirNombre();
void PedirNumeros();
void DecirNumeros();
int numero1;
int numero2;
double numero3;
private:
string NombreUsuario; // una misma variable
void Terminar(); // la funcion que hice
};


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

amchacon

Cita de: 1996marioful en 21 Febrero 2013, 21:37 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 (cpp) [Seleccionar]
class Ejemplo
{
private:
            int Variable;
public:
           int ObtenerVariable(){ return Variable;}
};


El problema es mucho más sutil que eso:

Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;

#include <string>
using std::string;
using std::getline;

#include "cabezal.h"

tunombrefuncion::tunombrefuncion(string nombre)
{
Establecernombre(nombre);
}
void tunombrefuncion::Establecernombre(string Enombre)
{
   if (Enombre.length() <= 25)
   {
      nombrepersona = Enombre;
   }
   else
   {
      Enombre.substr (0 , 25);
      nombrepersona = Enombre;
   }
}
string Darnombre()
{
  return nombrepersona;


Te falta una llave al final. Además tendrías que escribir string tunombrefuncion::DarNombre()
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

elkiy

Cita de: amchacon en 21 Febrero 2013, 22:02 PM
Falso, esta sentencia es totalmente válida:

Código (cpp) [Seleccionar]
class Ejemplo
{
private:
            int Variable;
public:
           int ObtenerVariable(){ return Variable;}
};


El problema es mucho más sutil que eso:

Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;

#include <string>
using std::string;
using std::getline;

#include "cabezal.h"

tunombrefuncion::tunombrefuncion(string nombre)
{
Establecernombre(nombre);
}
void tunombrefuncion::Establecernombre(string Enombre)
{
   if (Enombre.length() <= 25)
   {
      nombrepersona = Enombre;
   }
   else
   {
      Enombre.substr (0 , 25);
      nombrepersona = Enombre;
   }
}
string Darnombre()
{
  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. :(

elkiy

Cita de: 1996marioful en 21 Febrero 2013, 22:08 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

anonimo12121

repasate la sección clases , public privadas y protected lo que no podrias hacer con las privadas es llamarlas externamente
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746