Hemos visto que cuando un método debe retornar un dato disponemos al principio del método el tipo de dato que retornará (int, float etc.) y dentro del método especificamos con la palabra return el valor que devuelve.
¿Qué sucede si queremos retornar dos valores o más en un solo método? Una forma de solucionar este problema es pasar la dirección de dos variables y que las reciban dos parámetros de tipo puntero, luego por medio de estos punteros modificamos las variables que les pasamos por ejemplo desde la main.
Confeccionar una clase que permita administrar un vector de 5 enteros. Definir dos métodos: uno que permita cargar el vector y otro que retorne el mayor y el menor valor del vector. Emplear dos punteros para poder retornar dos datos en un único método.
#include<iostream> using namespace std; class Vector { int vec[5]; public: void cargar(); void retornarMayorMenor(int *pmay, int *pmen); }; void Vector::cargar() { for (int f = 0; f < 5; f++) { cout << "Ingrese componente:"; cin >> vec[f]; } } void Vector::retornarMayorMenor(int *pmay, int *pmen) { *pmay = vec[0]; *pmen = vec[0]; for (int f = 1; f < 5; f++) { if (vec[f]>*pmay) { *pmay = vec[f]; } else { if (vec[f]<*pmen) { *pmen = vec[f]; } } } } int main() { Vector vector1; vector1.cargar(); int ma, me; vector1.retornarMayorMenor(&ma, &me); cout << "El elemento mayor del vector es:" << ma << "\n"; cout << "El elemento menor del vector es:" << me << "\n"; return 0; }
Este proyecto lo puede descargar en un zip desde este enlace : ParametrosPuntero1.zip
Es muy importante entender como funciona el método retornarMayorMenor. En la main definimos dos variables de tipo entera:
int ma, me;
Y llamamos al método rotornarMayorMenor enviándole la dirección de estas dos variables (recordemos que mediante el operador & se accede a la dirección de una variable):
vector1.retornarMayorMenor(&ma, &me);
Como estamos enviando direcciones de variables el método debe tener parámetros de tipo puntero como lo son *pmay y *pmen:
void Vector::retornarMayorMenor(int *pmay, int *pmen)
Mediante estos dos punteros estamos accediendo a las variables definidas en la main llamadas: ma y me.
Cargamos en las dos variables definidas en la main (accediendo a las mismas por los punteros) la primer componente del vector:
*pmay = vec[0]; *pmen = vec[0];
Luego mediante un for recorremos el resto del vector para ver si hay alguna componente más grande a la que hemos considerado hasta ahora la mayor (lo mismo hacemos para la menor componente):
for (int f = 1; f < 5; f++) { if (vec[f]>*pmay) { *pmay = vec[f]; } else { if (vec[f]<*pmen) { *pmen = vec[f]; } } }
Como podemos observar luego en la main cuando imprimimos los contenidos de las variables ma y me aparecen en pantalla el valor mayor y menor del vector:
cout << "El elemento mayor del vector es:" << ma << "\n"; cout << "El elemento menor del vector es:" << me << "\n";
Como vemos en ningún momento asignamos valores directamente a las variables ma y me, sino que lo hicimos con los parámetros que apuntan a dichas variables.
#include<iostream> using namespace std; class Matriz { private: int mat[3][3]; public: void cargar(); void imprimir(); void retornarFilaColumna(int *pf, int *pc); }; void Matriz::cargar() { for (int f = 0; f < 3; f++) { for (int c = 0; c < 3; c++) { cout << "Ingrese componente:"; cin >> mat[f][c]; } } } void Matriz::imprimir() { for (int f = 0; f < 3; f++) { for (int c = 0; c < 3; c++) { cout << mat[f][c] << " "; } cout << "\n";; } } void Matriz::retornarFilaColumna(int *pf, int *pc) { int mayor = mat[0][0]; *pf = 0; *pc = 0; for (int f = 0; f < 3; f++) { for (int c = 0; c < 3; c++) { if (mat[f][c] > mayor) { mayor = mat[f][c]; *pf = f; *pc = c; } } } } int main() { Matriz matriz1; matriz1.cargar(); matriz1.imprimir(); int fila, columna; matriz1.retornarFilaColumna(&fila, &columna); cout << "Fila donde se encuentra el mayor:" << fila <<"\n"; cout << "Columna donde se encuentra el mayor:" << columna<< "\n"; return 0; }Este proyecto lo puede descargar en un zip desde este enlace :ParametrosPuntero2.zip