miércoles, 5 de octubre de 2016

Capítulo 75. Funciones Get y Set en C++


Diario de un programador.- Día 177


Funciones  Set y Get en C++

En este capítulo veremos unas funciones muy parecidas a la vistas el capítulo 61 con Java, por lo que esta clase será algo similar a aquella.

Es muy probable que en algún momento, sea necesario obtener el valor de una variable de una función para poder utilizarla en algún otro sitio. Las variables que se declaran dentro de una función se conocen como variables locales, y sólo se pueden utilizar en esa función. Cuando termina esa función, se pierden los valores de sus variables. Por lo tanto, para poder acceder a esas variables locales, es que se utilizan las funciones Set y Get. Lo que hace la función set, es establecer o dar un valor a una variable, en cambio la función Get, lo que hace es recuperar o conseguir ese valor para que pueda ser utilizado más tarde. Como ejemplo, crearé 3 funciones. Una función Set, una función Get y por último una función para mostrar el valor de la variable recuperada.

Para empezar, crearé un nuevo archivo, la cual tendrá una clase llamada “Antecedentes”.

Esta clase tendrá dos variables; Nombre y edad, los cuales tendrá como modificadores de acceso private

Las variables declaradas como private son accesibles sólo para las funciones de esa clase.


Lo siguiente, será crear las funciones Set que reciba un nombre escrito por el usuario (el cual será solicitado en la función principal). Las funciones son de acceso public, esto es para que puedan ser accesibles por otras funciones.


Aprovecho de dejar en claro que tanto la palabra Set como Get utilizada en los nombres de las funciones no son obligatorias. Se utilizan simplemente como "guía" para saber que función establece un valor y qué función recupera un valor. Las funciones podría llamarlas como yo quisiera y no pasaría nada, pero como dije antes, esos nombres sirven de guía y es bueno ponerlos para tener una idea de que hace esa función.

Esta función set, no retorna ningún valor ("void", las funciones set no retornan valores, solamente los establecen) En sus paréntesis se puede ver que la primera función recibe como parámetro una cadena de caracteres que en este caso es nombrada como "nom". En la siguiente línea se puede ver como la variable "nombre", tomará el valor de "nom" cuando ésta reciba algún dato

Muy bien, ya están creados las funciones set. Ahora crearé las funciones get. El primero me servirá para recuperar el valor de la variable "nombre" y el segundo me servirá para recuperar el valor de la variable "edad"


En la primera función "getNombre", se puede ver que es una función que tiene un tipo de retorno de tipo "string", además de que esta función (y la siguiente) no tiene parámetros ya que no necesita de ningún argumento para completar su tarea, a diferencia de los anteriores. La línea  de la primera función indica que esta debe devolver o retornar el valor de la variable "nombre". Al devolver dicho valor, se pude ocupar en otro sitio, como se verá más abajo. Para la función "getEdad" la explicación es la misma. Esta función retorna el valor de la variable "edad".

Ahora, aunque no es necesario, crearé en esta clase una función que utilice los datos "retornados" por estas funciones. Voy a crear la función "informe" que se encargará de esta tarea.


Esta función, es una función que no devuelve ningún valor ni recibe atributos, porque simplemente se encarga de mostrar el contenido de las funciones get mediante las instrucciones cout

Ahora lo que voy a hacer, es crear la función “main” para solicitar al usuario que ingrese sus datos personales.

En esta función, voy a solicitar del usuario su nombre y edad. Para ello tendré que declarar la variable "nombreUsuario" y "edadUsuario" que utilizaré para guardar los datos.


Lo siguiente que voy a hacer, será crear un objeto que me permita utilizar la clase "Antecedentes" y sus funciones


Esto ya casi está listo. Lo próximo que voy a hacer, será solicitar los datos al usuario.


Y por último, llamaré a las funciones para que hagan su tarea.


La línea 48 se encarga de enviar los datos de la variable "nombreUsuario" que está en el parámetro, hacia la función setNombre. Lo mismo hace la línea 49 pero con la variable "edadUsuario". En la línea 50 se ejecuta la función que finalmente recupera y muestra los datos ingresados por el usuario.

Si se ejecuta este programa, muestra el siguiente resultado.


El código completo es el siguiente:

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::getline;

class Antecedentes{

private:
    string nombre;
    int edad;

public:
    void setNombre(string nom){
        nombre = nom;
    }
    void setEdad(int ed){
        edad = ed;
    }

    string getNombre(){
        return nombre;
    }
    int getEdad(){
        return edad;
    }

    void informe(){
        cout << "Nombre: " << getNombre() << endl;
        cout << "Edad: " << getEdad() << endl;
    }
};

int main(void){

    string nombreUsuario;
    int edadUsuario;

    Antecedentes datos;

    cout << "Ingresa tu nombre: ";
    getline(cin, nombreUsuario);
    cout << "Ingresa tu edad: ";
    cin >> edadUsuario;

    datos.setNombre(nombreUsuario);
    datos.setEdad(edadUsuario);
    datos.informe();

return 0;
}

Una pequeña modificación al programa anterior que podemos hacer es que solicite los datos por separado, o sea que se pueda ver solo el nombre, solo la edad o ambos. Esto se puede lograr con una instrucción switch. El código completo de este programa es el siguiente:


#include<iostream>
using std::cout;
using std::cin;
using std::string;
using std::endl;
using std::getline;

class Antecedentes{

private:
  string nombre;
  int edad;

public:

  void setNombre(string establecerNombre){
    nombre = establecerNombre;
  }
  void setEdad(int establecerEdad){
    edad = establecerEdad;
  }
  string getNombre(){
    return nombre;
  }
  int getEdad(){
    return edad;
  }

  void informe(){
  cout << "Nombre: " << getNombre() << endl;
  cout << "Edad: " << getEdad() << endl;
  }

};

int main(void){

  string nom;
  int ed;
  int opcion;

  Antecedentes datos;

  cout << "Ingresa tu nombre: ";
  getline(cin, nom);
  datos.setNombre(nom);

  cout << "Ingresa tu edad: ";
  cin >> ed;
  datos.setEdad(ed);
  cout << "\n";

  cout << "Ingresa una opcion: " <<endl;
  cout << "1 Mostrar informe" << endl;
  cout << "2 Mostrar nombre" << endl;
  cout << "3 Mostrar edad\n" << endl;

  cin >> opcion;

  switch (opcion){
  case 1:
    datos.informe();
    break;
  case 2:
    cout << "Nombre: " << datos.getNombre();
    break;
  case 3:
    cout << "Edad: " << datos.getEdad();
    break;
  default:
    cout << "Opcion no valida" << endl;
  }

return 0;
}


Espero se haya entendido. Lo único que queda es practicar y practicar


Gustavo J. Cerda Nilo
Julio 2016, Octubre 2016




1 comentario:

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...