You are on page 1of 7

1.

3 Las funciones en C++

1. Definición de las funciones


TipoDeFuncion NombreDeFuncion(lista de parámetros)

− TipoDeFuncion: El tipo del valor que la función va a retornar si hay


− La lista de parámetros:
DeclaracionDeParametro, ..., DeclaracionDeParametro
Cada Declaración de parámetros:
TipoParametro NombreParametro
Ejemplos:

int PedirY();
float AreaCirculo(float Radio);
bool EsVocal(char CaracterActual);

2. Los preprocesadores
− Incluyen: Directivos de inclusión de ficheros y directivos de
compilación condicional
− Unidad de translación: el fichero resultado del pre-procesador
2.1 Directivos de inclusión de ficheros
− Especificar el nombre de un fichero que forma parte de la
unidad de translación y substituye el directivo mismo.
− Dos formas:
#include <NombreDeFichero>
// para los en directorios estándar del sistema
#include “NombreDeFichero”
// Significa que el sistema tiene que buscar
// puede ser una ruta absoluta o relativa
// por defecto es la carpeta actual

1
2.2 Directivos de compilación condicional
− Incluyen #ifndef (si no se ha definido) y #ifdef (si se ha
definido)
− #ifndef ALGO #ifdef ALGO
la sección….
#endif #endif
Para decidir si compilar o no compilar la sección.
Ejemplo: Garantizar la definición de a, b solamente ocurrir
una vez.
#ifndef NO_MAS_A_Y_B
int a;
int b;
#define NO_MAS_A_Y_B
#endif

3. Las librerías de software


− Los espacios de nombres globales : .h
• Qué se puede utilizar durante todo el fichero de programa
• No hace falta de utilizar “using namespace …”
Ejemplos:
#include <math.h>
#include “rect.h”

− Los espacios de nombres no globales


• Sin ninguna extensión
• Hay que poner su espacio de nombres donde se define
Ejemplo: #include <iostream>
using namespace std;
cout << “Hello world” << endl; // la primera manera
O en este formato:
#include <iostream>
std::cout << “Hello world” << endl; // la segunda manera

2
− Las definiciones de funciones
• Normalmente no están en los ficheros de cabecera
• Suelen están en los ficheros de objetos .obj
• Se hace la compilación más rápido: no hace la traslación de librerías
− La librería “assert”
• Dispone un preprocesador macro assert
• assert usa una expresión como su parámetro
• Cuando se utiliza, comprueba su parámetro si tiene el valor cero.
 Si no es cero, el programa continua normalmente
 Si es cero, envía un mensaje y termina la ejecución
Ejemplo:
#include <assert.h>
assert(Denominator);
Si Denominator es cero: sale el error:
Assertion failed: Denomiator, file my.cpp line 12

4. Sobrecarga de funciones
− Sobrecarga de los operadores: el significativo de los
operadores depende de los tipos de sus operandos
ejemplo: el operador + : depende que está sumando.
− Sobrecarga de las funciones: se puede crear más que
una función con mismo nombre que comportan
diferentemente
ejemplo: una función Swap()
// la versión de entero
void Swap(int &x, int &y) {
int tmp = x;

3
x = y;
y = tmp;
return;
}

// la versión de double
void Swap(double &x, double &y) {
double tmp = x;
x = y;
y = tmp;
return;
}

Ejemplo: double w = 1.2, z = 3.4;


Swap(w, z);
La resolución de funciones sobrecargadas : decide cuál de las
versiones va a ejecutar.

1.4 Las clases y la programación orientada a


objetos:
El concepto clase es más importante para realizar la
programación orientada a objetos
Los usuarios pueden definir nuevos tipos de objetos para
encapsular ambos atributos y comportamientos de
objetos
1. La construcción de las clases: la declaración de clases

4
Un ejemplo
class RectangleShape {
public:
RectangleShape(SimpleWindow &Window,
float Xcoord, float Ycoord, const color &Color,
float Width, float Height);
void Draw();
color GetColor() const;
void GetSize(float &Width, float &Height) const;
float GetWidth() const;
float GetHeight() const;
void GetPosition(float &Xcoord, float &Ycoord) const;
void SetSize(float Width, float Height);
private:
SimpleWindow &Window;
float Xcenter;
float Ycenter;
color Color;
float width;
float Height;
};

class NombreDeClase {
public:
// Aquí se colocan los prototipos para los constructores
// miembros de atributos públicos de datos
// miembros de las funciones públicas
private:
// Aquí se colocan los miembros de las funciones privados
// miembros de atributos privados de datos de la clase
};

− La parte privada (private)


• Es la parte que no se puede tocar por las funciones fuera de la
clase para esconder la información interna
• Cada declaración corresponde a cada atributo del objeto
• SimpleWindow &window;
declara un subobjeto que contiene la referencia de
SimpleWindow que va a dibujar el objeto RectangleShape si se
lo declara. Se utiliza referencia para no instanciar cada vez.
• Otros atributos: sub-objetos para contener el centro del
rectángulo, su color, su ancho y altura.

5
− La parte pública (public)
• Es la parte interfaz de la clase que se puede acceder por las
funciones fuera de la clase para usar la clase
• El constructor: es una función de la clase que se convoca
automáticamente cuando un objeto de la clase se define
 Tiene el mismo nombre de la clase
 Puede iniciar una parte o todos los valores de los miembros
El constructor de la clase RectangleShape:
RectangleShape(SimpleWindow &Window,
float Xcoord, float Ycoord, const color &Color,
float Width, float Height);
• Inspectores: las funciones que retornan atributos de los objetos
de la clase
• Mutadores: Las funciones que pueden modificar los atributos de
una clase
• Facilitadores: las acciones o servicios que el objeto de la clase
puede facilitar.
void Draw();

• La declaración const: Para definir que la función no puede cambiar el


objeto
color GetColor() const;

2. El uso de las clases


− El concepto de instanciación: Declarar un objeto de una clase
después de su construcción.
RectangleShape R(W, 4.0, 4.0, Blue, 2.0, 3.0);
// Declara y crea un objeto RectangleShape e inicia lo.
RectangleShape R(W); // declara un rectángulo por valores defectos
− El acceso de la clase:
• Parte privada: solamente los miembros las funciones de la clase
• Parte pública: no hay que ser miembros de la clase.
Para enviar mensajes a los objetos de una clase
Se acceder con "."

R.draw()
R.SetColor(Cyan);
R.SetSize(1.0, 2.0);

6
3. Ejemplos de uso de una clase

#include "rect.h"
SimpleWindow W("Dos Cuadrados", 8, 8);
// si incluimos rect.h, ya podemos utilizar la clase.

int ApiMain() {
W.Open();
RectangleShape B(W, 4, 4, blue, 1, 1);
B.Draw();

// crear y dibujar otro rectángulo para que se tocan uno a otro

RectangleShape M(W, 2.5, 2.5, Magenta, 2, 2);


M.Draw();

return 0;
}

4. La definición de las funciones de miembros


− El uso del operador :: (de ámbito)
• Para referir la relación de la clase y sus miembros fuera de la
parte de declaración de la clase

float RectangleShape::GetWidth() const {


return Width;
}
• Las funciones de los miembros suelen definirse fuera de la
declaración de la clase

You might also like