Estructura Básica de un programa en C++
Funciones
Con
frecuencia, un algoritmo se repite, variando acaso el valor de los
datos: ordenar una lista, calcular la media, ...Para evitar reescribir
el mismo código una y
otra vez, se diseñan las funciones, un conjunto de instrucciones
que cumplen una función determinada (valga
la redundancia), son el alma de la programación y para poder
utilizarse deben: declararse y definirse.
Declaración de Funciones
Al
igual que con los datos en C y C++ antes de usarse una función
ésta debe declararse, lo cual se hace tal que así:
tipo_dato_devuelto nombre_función ([argumentos]);
Los
argumentos son opcionales porque existen funciones que no tienen
argumentos. Cuando una función tiene argumentos, en la
declaración es suficiente con indicar el tipo de datos que
recibe; si son varios estos se separan por coma [,]
A
veces una función no precisa devolver dato alguno, lo que en
otros lenguajes se denominan subrutinas, esto se específica en C
declarando la función del tipo
void.
En nuestro ejemplo tenemos:
int menor (int, int);que
le dice al compilador que va a utilizarse una función denominada
menor, que recibe como argumentos dos números enteros y como
resultado devuelve otro entero.
Todas
las funciones deben declararse antes de utilizarse. Si eliminas
[comentas] esa línea de código, al construir te aparece
el mensaje:
'menor' no se declaró en este ámbito.
#include <iostream>
// int menor (int,int);
int main()
{
int num1, num2;
std::cout<<"Introduce dos números (separados por un espacio): ";
std::cin>>num1>>num2;
num1=menor(num1,num2);
if (num1==0)
std::cout<<"los números son iguales";
else
std::cout<<num1<<" es el menor de los dos números";
return 0;
}
int menor (int n1, int n2)
{
if (n1==n2) return 0;
else
if(n1>n2) return n2;
else return n1;
}
Definición de funciones
La
definición consiste en el desarrollo de la función, el
código en sí. Las definiciones están en los
archivos fuente (.cc,.cpp,.c). Tienen una estructura similar a la
declaración, de hecho, si una función es definida con
anterioridad a main, es a la vez declarada.
tipo_dato_devuelto nombre_función ([argumentos]){ codigo}
A
diferencia de la declaración, la definición requiere que
los argumentos vengan declarados, es decir no sólo indican el
tipo, también el identificador o nombre de la variable utilizada en el
código. En la declaración, también puede ponerse
el identificador pero no es estrictamente necesario.
En nuestro caso:
int menor (int n1, int n2)
{
if (n1==n2) return 0;
else
if(n1>n2) return n2;
else return n1;
}return
es la palabra clave utilizada para devolver el valor. En nuestra
función devuelve 0 cuando ambos números son iguales y
devuelve el número menor en caso contrario. En nuestra
función
main devuelve 0 que es el valor utilizado para comunicar al sistema que
el programa a terminado con éxito.
Si
las funciones se definen antes que main, declaración y
definición se realizarían en un solo paso. El siguiente
programa compila perfectamente.
#include <iostream>
int menor (int n1, int n2)
{
if (n1==n2) return 0;
else
if(n1>n2) return n2;
else return n1;
}
int main()
{
int num1, num2;
std::cout<<"Introduce dos números (separados por un espacio): ";
std::cin>>num1>>num2;
num1=menor(num1,num2);
if (num1==0)
std::cout<<"los números son iguales";
else
std::cout<<num1<<" es el menor de los dos números";
return 0;
}
main es la función donde se inicia la
ejecución del programa.
Es
una función esencial y única. Es obligatorio que todo
programa tenga una, y solo una, definición (y
declaración) de main. Como luego veremos, entre las cosas maravillosas de C++, está la
sobrecarga de funciones,
es decir, poder definir varias funciones con el mismo nombre, donde la
diferencia que permita seleccionar la correcta al compilador descanse
en los argumentos, así puedo definir int suma (int, int);
y int suma (int, char); que el ordenador sabrá seleccionar una u
otra en función de los argumentos utilizados,... Por ejemplo, en
nuestro programa existen una función, algo especial, que
está sobrecargada, es la función
std::cout<<, que nos ha permitido imprimir tanto números (int) como texto (char*).
main es la excepción y no puede sobrecargarse.
Y si std::cout<< es una función, y toda función debe declararse antes de usarse, ¿donde?