6. Clases y Métodos.. 6.1 Structs 6.2 Funciones 6.3 Namespaces 6.4 Clases

Preview:

Citation preview

Programación Gráfica6. Clases y Métodos.

Contenidos 6.1 Structs 6.2 Funciones 6.3 Namespaces 6.4 Clases

6.1 Structs

Struct Nos permiten agrupar varios datos, aunque sean

de distinto tipo, que mantengan alguna relación, permitiendo manipularlos juntos, con un mismo identificador.

struct [<identificador>] {

[<tipo> <nombre_variable>[,<nombre_variable>,...]]; …

} [<variable_estructura>[,<variable_estructura>,...];

Struct En el interior de una estructura podemos definir todos

los atributos que resulten necesarios.

Son estructuras usadas básicamente para contener variables; como una clase sin métodos para llamarlos de alguna manera, aunque como veremos también se pueden usar métodos en ellas.

Ejemplo - Declaración

struct Jugador {

char Nombre[65];float posicionX;float posicionY;int monedas;bool grande;

} mario;

Ejemplo - Acceso

mario.monedas++;mario.nombre = “Mario”;mario.posicionX = 0;mario.posicionX = 100;mario.grande = false;

Inicializaciónstruct A {

int i;int j;int k;

};

A ejemploA = {10, 20, 30};B ejemploB = {10, {'a', 'b'}, 20};

struct B {

int x; struct C { char c; char d; } y; int z;

};

Ejemplo - Inicialización

Jugador Luigi = {“Luigi”, 0, 100, 0, false};

Ejemplo2struct Point{

int x;int y;

Point(){

x = 0;y = 0;

}

void setPoint(int x, int y){

this->x = x;this->y = y;

}}

El puntero this

¿Cómo hace la función para referirse a un dato de un objeto en concreto?Usando el puntero this.

this->x = x;this->y = y;

6.2 Funciones

Funciones Son un conjunto de instrucciones que realizan una

tarea específica.

Sirven para abstraer un algoritmo.

En general, toman unos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno.

Declaración Al igual que las variables, las funciones deben declararse y

definirse.

Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función. También se les denomina “prototipo” a las declaraciones.

<tipo> func(<lista de declaración de parámetros>);

int min(int a, int b);

float max(float a, float b);

Valor de Retorno<tipo> func(<lista de declaración de parámetros>);

Es el valor que puede o no entregarnos la función.

Se utiliza void, en la declaración, si no necesitamos un valor de retorno.

En general se puede utilizar cualquier tipo de datos para el retorno:◦ float,int, char, char[], etc…

Valor de retornoreturn <tipo>;

Si la función retorna algún tipo de datos, se utiliza return para retornar un valor de ese tipo de datos.

int Mayor(int a, int b){

if(a > b)return a;elsereturn b;

}

Parámetros con valores de referencia

Algunas veces nos puede interesar que ciertos parámetros que necesitan una función no sea necesario proporcionarlos siempre. Esto suele suceder cuando esos parámetros casi siempre se usan con un mismo valor.

void Inicializar(int x = 0, int y = 0);

void funcion(int x, int y) {

…setPosition(x, y);

}

Parámetros con valores de referencia

void funcion(int = 1); // Legal

void funcion1(int a, int b=0, int c=1); // Legal

void funcion2(int a=1, int b, int c); // Ilegal

void funcion3(int, int, int=1); // Legal

Sobrecarga Se pueden definir varias funciones con el mismo nombre,

con la única condición de que el número y/o el tipo de los parámetros sean distintos.

El compilador decidirá cual de las versiones ocupar después de analizar el número y el tipo de los parámetros.

int min(int a, int b); char min(char a, char b); double min(double a, double b); float min(float a, float b);

Sobrecargaint min(int a, int b);

int min(int a, int b, int c);

int min(int a, int b){

return (a < b) ? a : b;}

int min(int a, int b, int c){

int d = min(a,b);

return (d < c) ? d : c;}

Sobrecarga de operadores Se crea una función para que se ejecute cuando se

utilice un operador.

Se pueden sobrecargar todos los operadores básicos.

<tipo> operator <operador> (<argumentos>);

<tipo> operator <operador> (<argumentos>) {

<sentencias>; }

6.3 Namespace

Namespace Espacio de nombres.

Nos ayuda a evitar problemas con identificadores en grandes proyectos.

Así pueden existir variables y funciones con el mismo nombre, declaradas en diferentes ficheros fuentes, cuando se declaran en distintos espacios de nombre.

Sintaxisnamespace [<identificador>] {

... <declaraciones y definiciones> ...

}

Ejemplo// Fichero de cabecera

"puntos.h"

namespace 2D {

struct Punto {

int x; int y;

}; }

namespace 3D {

struct Punto {

int x;int y; int z;

}; }// Fin de fichero

Using Para activar un espacio y ocuparlo por defecto se

utiliza la directiva “using”.

using namespace <identificador>;

#include "puntos.h" using namespace 2D; Punto p1;3D::Punto p2;

Utilidad Nos permite utilizar el código en forma de librería.

Por ejemplo un motor de videojuegos, podría tener los siguientes namespace: render, fisica, sonido, red, ia, para diferenciar cada uno de sus componentes, y a su vez, cada uno de esos componentes puede dividirse en más namespaces para así tener un orden lógico de los mismos.

Espacios Anidados Como mostramos, los namespace sirven para tener un orden lógico en

el código, por lo tanto tiene sentido colocar un namespace dentro de otro.

namespace Motor {

namespace Render{ namespace Particulas { …} }

}

6.4 Clases

Clases Son el principio de la programación orientada a

objetos.

Una clase representa un objeto genérico del mundo real.

Una clase define un conjunto de funciones y atributos.

Declaraciónclass <identificador de clase> [<:lista de clases

base>] {

<lista de miembros> } [<lista de objetos>];

La lista de clases bases, será la herencia. La lista de miembros son las funciones y

atributos.

Declaración: Ejemploclass Tablero{

private:int x, int y;

public:Tablero(int x, int y);void Marcar(int marca, int x, int y);void getMarca(int x, int y);

}

Preguntas ¿?