Parametros, ambito, sobrecarga

El camnio de c++ es largo, pero se sigue avanzando. Veamos las funciones inline, un recurso interesante para mejorar el rendimiento.


/**
* Inline.cpp
* Programa para probar funciones Inline
* Las funciones Inline no se compilan como funciones aparte,
* lo que se hace al compilar es añadir el contenido de la funcion haya
* donde se se invoca. Con lo que es mucho mas rapido de ejecutar
* y ademas nos da la limpieza de separar el codigo.
*
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Inline.cpp -o Inline
*/

using namespace std;
#include <iostream>

// las funciones en CPP las debemos declarar antes de invocar
// aqui tenemos el prototipo. Si no se pone tendremos ERROR de compilador
// Declaramos la funcion como inline
inline double Calcula (double a, double b);

// Log : saca un mensaje por pantalla
void Log(char *mensaje);

// Variables globales
long variable = 666;
char *PROGRAMA = "Globales> ";

int main () {

	// Sacamos por salida standar un mensaje
	Log("Vamos a probar los operadores");

	unsigned int test = 0;
	double a = 23, b = 21, c = 34;
	
	// Tomamos el valor a
	Log("Dame valores. \na=");
	cin >> a;
	
	// Tomamos el valor b
	cout << "b=";
	cin >> b;
	
	cout << "Y ahora son estos: b=" << b << " a=" << a << " global:" << variable << "Y el resultado de la funcion c=" << c << endl;

	// Probamos la funcion
	Log("Venga va vamos"); 
	
	return 0;
	
}


/**
* Calcula
* parametros: double a, double b
* devuelve double
* En la implementacion no hace falta volver a poner INLINE
*/
double Calcula (double a, double b) {

	a *= 35462;
	b *=32546 + a;
	
	return (a / b) * variable;
}


/**
* Log
* parametros: char *mensaje
* devuelve void
*/
void Log (char *mensaje) {
	cout << PROGRAMA << mensaje << endl;
}


Paso de parametros Vamos a ver formas de pasar parametros.


/**
* Parametros.cpp
* Programa para probar los parametros de las funciones y
* la forma de aplicar valores por defecto
*
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Parametros.cpp -o Parametros
*/

using namespace std;
#include <iostream>

// las funciones en CPP las debemos declarar antes de invocar
// aqui tenemos el prototipo. Si no se pone tendremos ERROR de compilador
double Calcula (double a, double b);

// Log : saca un mensaje por pantalla
void Log(char *mensaje = "Sin valor prefijado");

// suma: suma dos valores
int Suma(int a = 0, int b = 0, int c = 0);

// Variables globales
long variable = 666;
char *PROGRAMA = "Globales> ";

int main () {
	// Sacamos por salida standar un mensaje
	Log("Vamos a probar los operadores");

	// Llamada sin parametros
	Log();

	unsigned int test = 0;
	int a = 23, b = 21, c = 34, d = 0;
	
	// Llamanda sin parametros
	d = Suma();
	
	cout << "Y el resultado de la funcion Suma sin parametros :" << d << endl;

	// Llamada con parametros
	d = Suma(a,b,c);
	
	cout << "Y el resultado de la funcion Suma :" << d << endl;

	// Probamos la funcion
	Log("Venga va vamos"); 

	return 0;

}

/**
* Calcula
* parametros: double a, double b
* devuelve: double
*/
double Calcula (double a, double b) {
	return (a / b) * variable;
}


/**
* Log
* parametros: char *mensaje
* devuelve: void
* NOTA: no hace falta volver a poner el valor prefijado
*/
void Log (char *mensaje) {
	cout << PROGRAMA << mensaje << endl;
}


/**
* Suma
* parametros: int a, int b, int c
* devuelve: int
*/
int Suma (int a = 0, int b = 0, int c = 0) {

	Log("Vamos a ver. Estamos en suma. ");
	// Devolvemos un valor
	return (a + b + c);

}


Sobrecarga de funciones La sobrecarga es otro concepto básico en la POO. Aqui se muestra un boton.


/**
* Sobrecarga.cpp
* Programa para probar la sobrecarga de funciones
* La sobrecarga es una misma funcion con distintos parametros
* Con la sobrecarga logramos el POLIMORFISMO de clases 
y funciones
*
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Sobrecarga.cpp -o Sobrecarga
*/

using namespace std;
#include <iostream>

// las funciones en CPP las debemos declarar antes de invocar
// aqui tenemos el prototipo. Si no se pone tendremos ERROR de compilador
double Calcula (double a, double b);

int Calcula (int a, int b);

float Calcula (float a, float b);

// Log : saca un mensaje por pantalla
// Esto provocaria error de compilador por ambiguedad de sobrecarga
//void Log();
// Log : saca un mensaje por pantalla
// NOTA: el valor por defecto solo se pone en la DECLARACION
void Log(char *mensaje = "Sin valor prefijado");

// suma: suma dos valores
int Suma(int a = 0, int b = 0, int c = 0);

// Variables globales
long variable = 666;
char *PROGRAMA = "Globales> ";


int main () {

	// Sacamos por salida standar un mensaje
	Log("Vamos a probar los operadores");

	// Llamada sin parametros
	Log();

	unsigned int test = 0;
	int a = 23, b = 21, c = 34, d = 0;
	
	// Llamanda sin parametros
	d = Suma();
	
	cout << "Y el resultado de la funcion Suma sin parametros :" << d << endl;

	// Llamada con parametros
	d = Suma(a,b,c);

	cout << "Y el resultado de la funcion Suma :" << d << endl;

	// Probamos la funcion
	Log("Venga va vamos"); 

	return 0;

}


/**
* Calcula
* parametros: double a, double b
* devuelve: double
*/
double Calcula (double a, double b) {

	return (a / b) * variable;

}


/**
* Calcula
* parametros: float a, float b
* devuelve: float
*/
float Calcula (float a, float b) {
	
	return (a / b) * variable;

}


/**
* Calcula
* parametros: long a, long b
* devuelve: long
*/
long Calcula (long a, long b) {

	return (a / b) * variable;

}


/**
* Log
* parametros: char *mensaje
* devuelve: void
*/
void Log (char *mensaje) {
	
	cout << PROGRAMA << mensaje << endl;

}


/**
* Suma
* parametros: int a, int b, int c
* devuelve: int
*/
int Suma (int a = 0, int b = 0, int c = 0) {
	
	Log("Vamos a ver. Estamos en suma. ");

	// Devolvemos un valor
	return (a + b + c);

}

El ambito Hasta donde se identifica una variable? Para saltarnos todas las vallas podemos usar variables globales. No conviene abusar de este tipo de variables.


/**
* Globales.cpp
* Programa para probar variables y su scope
*
* Pello Xabier Altadill Izura 
*
* Compilado: g++ Globales.cpp -o Globales
*/

using namespace std;
#include <iostream>

// las funciones en CPP las debemos declarar antes de invocar
// aqui tenemos el prototipo. Si no se pone tendremos ERROR de compilador
double Calcula (double a, double b);

// Log : saca un mensaje por pantalla
void Log(char *mensaje);

// Variables globales
long variable = 666;
char *PROGRAMA = "Globales> ";


int main () {

	// Sacamos por salida standar un mensaje
	Log("Vamos a probar los operadores");

	unsigned int test = 0;
	double a = 23, b = 21, c = 34;

	// Tomamos el valor a
	Log("Dame valores. \na=");
	cin >> a;

	// Tomamos el valor b
	cout << "b=";
	cin >> b;

	cout << "Y ahora son estos: b=" << b << " a=" << a << " global:" << variable <<< "Y el resultado de la funcion c=" << c << endl;

	// Probamos la funcion
	Log("Venga va vamos"); 
	
	return 0;

}


/**
* Calcula
* parametros: double a, double b
* devuelve double
*/
double Calcula (double a, double b) {
	
	return (a / b) * variable;

}


/**
* Log
* parametros: char *mensaje
* devuelve void
*/
void Log (char *mensaje) {

	cout << PROGRAMA << mensaje << endl;

}