Professional Documents
Culture Documents
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
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;
}
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
};
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();
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();
return 0;
}