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