sábado, 3 de septiembre de 2016

Capítulo 69: Objetos con parámetros en C++


Diario de un programador.- Día 168

Objetos con parámetros en C++:



Al revisar este capítulo,  el anterior y el siguiente, me pude dar cuenta que mucha información es similar a lo estudiado en Java, así que no debería ser difícil de asimilar esta materia (a menos que tengamos problemas en entender lo estudiado en Java). Me imagino que esto es así ya que ambos lenguajes están orientados a objetos. Bueno, continuando con la lección de hoy, al igual que las funciones, los objetos también pueden recibir parámetros, los cuales permiten entregar información adicional. Veamos la siguiente clase:


Esta clase contiene una función que recibe un parámetro (string materia) Nota: Para utilizar "string" tuve que declarar en la cabecera lo siguiente:

using std::string;

Y además tuve que agregar en la cabecera using std::endl; para poder utilizar esta función en forma abreviada.
La siguiente línea de esta función muestra el mensaje "Este es el cuaderno de ", seguido de la variable "materia", lo ingresado en esta variable será lo que completará la frase.
En la función principal tengo lo siguiente:


Dentro de la función lo primero que hago es crear un objeto de la clase NombreMateria. Este objeto lo llamo cuaderno. En las siguientes líneas se declara una variable ("materia") y se solicita al usuario que ingrese el nombre de la materia del cuaderno. Este nombre es almacenado dentro de la variable "materia".
Posteriormente se encuentra la siguiente línea:

Cuaderno.NombreCuaderno(materia)

Al objeto se le pasa como parámetro, el contenido de la variable "materia". Esta información es pasada a la función que se está llamando " NombreCuaderno(string materia)" Esta información al ser recibida por la función, es agregada a la línea "cout << "Este es el cuaderno de " << materia;". Al ejecutar el código anterior, se obtiene el siguiente resultado:


Una pequeña modificación que se me ocurre hacerle a este programa, es modificar la siguiente línea:
cin >> materia;

por esta otra:

getline(cin, materia);

la diferencia es que la función getline  permite leer ingresos con espacios en blanco, entregando la posibilidad de ingresar frases en vez de simples palabras. Para usar getline hay que agregar en la cabecera lo siguiente:

using std::getline;
La sintaxis de getline es la siguiente:
getline(cin, nombreVariable);

No es muy dificil ¿o sí?...

El código completo del programa con la última modificación es así:

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

class NombreMateria{
public:

  void NombreCuaderno(string materia){
    cout << "Este es el cuaderno de " << materia;

  }//fin funcion
};

int main(void){

  NombreMateria Cuaderno;

  string materia;
  cout << "Ingresa la materia del cuaderno: ";
  getline(cin, materia);

  Cuaderno.NombreCuaderno(materia);

return 0;
}

Al ejecutar este programa, muestra lo siguiente:


En este programa se pudo observar que para declarar una variable de cadena de caracteres, se tuvo que agregar en la cabecera using std::string; esto es así ya que en realidad la cadena de caracteres es un objeto de la clase string de la biblioteca de C++. Esta clase se debe incluir en la cabecera del siguiente modo: #include<string>. En mi ejemplo no lo hice (porque se me olvidó jajaja), pero de todas formas es incluido en forma interna por el compilador al agregar en la cabecera el using std::string. De ahora en adelante lo voy a incluir cada vez que se requiera y no dejar que el compilador lo haga por mí,  por lo menos las buenas prácticas de programación así lo dicen, esto es debido a que en mi compilador el programa funciona, pero no quiere decir que funcione en otro compilador, por eso hay que tratar en lo posible apegarse al estándar y si el sistema estándar dice que es recomendable hacerlo, entonces hay que hacerlo y acostumbrarse a ello.
Seguramente alguien se preguntará ¿para qué crear clases si con las funciones obtengo los mismos resultados? Esto es porque principalmente en la programación orientada a objetos se trabaja con clases, objetos, atributos etc. (Recordar las lecciones de Java) y al igual que en Java, esto permite dividir el trabajo en varios módulos que pueden encontrarse en distintos archivos, pero esto es algo que se verá más adelante y con el tiempo también se mencionarán los pilares fundamentales de la programación orientada a objetos que son la abstracción, la herencia, el polimorfismo y el encapsulamiento. Hasta la próxima.

Gustavo J. Cerda Nilo
Abril 2016, Septiembre 2016





No hay comentarios:

Publicar un 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...