[Apuntes C++] Estructuras

Solicite, consulte o publique recursos de referencia para desarrolladores.

[Apuntes C++] Estructuras

Notapor julen26 » Mié Sep 26, 2007 3:21 pm

Buenas, ahora traigo algo parecido con las estructuras, pero vuelvo a decir que es muy basico. Para poder entender como funcionan y para que podrían servir, siempre orientado a los juegos claro. :D

Las estructuras son un conjunto de variables. Para ir practicando crearemos una simple estructura, un disparo. Para declarar la estructura utilizaremos la palabra struct y a continuación el nombre de la estructura. Luego se utilizan las llaves para escribir dentro el contenido de esta, y al final punto y coma porque es como si estuviéramos declarando una función.
Quedaría así:
Código: Seleccionar todo
struct Disparo
{
   //Contenido de la estructura
} ;


Bien, ahora vamos a pensar en las variables que debería tener un disparo. Primero necesitaremos dos variables que indiquen la posición, efectivamente, x e y. Las variables que contendrá la estructura se declaran dentro de la misma:
Código: Seleccionar todo
struct Disparo
{
   //Contenido de la estructura
   
   //Posición del disparo
   int x, y ;
} ;


Bien, ahora necesitaremos más datos para la estructura. Añadiremos la velocidad, pero esta vez será de tipo float para que pueda tener una velocidad también con números decimales. Podríamos utilizar el double para mucha más precisión, pero con un float ya vale. Además con double se trabaja más lento, no mucho pero es mas lento. Así que vamos a añadir la velocidad:
Código: Seleccionar todo
struct Disparo
{
   //Contenido de la estructura
   
   //Posición del disparo
   int x, y ;
   //Velocidad del disparo
   float velocidad ;
} ;


(Nota: es recomendable nombrar las estructuras y clases con un nombre que comience con mayúsculas)

Continuando, podemos decir que falta un dato fundamental en nuestra estructura; la dirección. Nosotros hemos decidido hacerlo de manera polar. Si lo hubiésemos hecho de manera rectangular hubiese quedado:

Código: Seleccionar todo
float hSpeed, vSpeed;


en lugar de esta manera que es la que nos corresponde:

Código: Seleccionar todo
float direccion, velocidad;


Y con esto ya tendríamos nuestra estructura básica.
Ahora para utilizarlo deberíamos declarar variables usando el nombre de la estructura, por ejemplo:

Código: Seleccionar todo
Disparo bala;


Quedaría declarada, y para acceder a sus miembros no tenemos más que utilizar el operador correspondiente, el punto (.). Un ejemplo:

Código: Seleccionar todo
int main()
{
   // Declarar una variable de la estructura Disparo
   Disparo bala ;
           
   // Iniciar los datos de la variable bala
   bala.x = 0 ;
   bala.y = 0 ;
   bala.direccion = 270 ;
   bala.velocidad = 5 ;
           
   return 0 ;
}


Podemos cambiar los valores para poder apreciar el cambio, para ello podemos usar printf.

Código: Seleccionar todo
   // Posición de la bala:
   printf("Posicion de la bala: (%d,%d)\n", bala.x, bala.y);


Con esto nos podemos imaginar como es un juego, lleno de estructuras y clases. Las clases son más complejas que las estructuras. Las estructuras estaban desde el lenguaje C, mientras que las clases están desde el lenguaje C++. Es decir, que en un compilador de C no puedes usar clases. Por lo tanto se podría decir que las clases son una versión mejorada de las estructuras.

Para finalizar con las estructuras veremos que son los constructores. Un constructor se declara dentro de la estructura con el nombre de la misma, de esta forma:

Código: Seleccionar todo
struct Disparo
           {
               // Contenido de la estructura
           
              // Posición del disparo
              int x, y ;
           
              // Vector de velocidad
              float velocidad, direccion ;
           
              // Constructor
              Disparo()
              {
                 // Aquí que debe hacer el constructor
              }
           } ;


El constructor es como una función que se ejecuta cuando declaras una variable de esta estructura. Veamos esto:

Código: Seleccionar todo
struct Disparo
           {
               // Contenido de la estructura
           
              // Posición del disparo
              int x, y ;
           
              // Vector de velocidad
              float velocidad, direccion ;
           
              // Constructor
              Disparo()
              {
                 // Aquí que debe hacer el constructor
           
                 // Iniciar datos
                 x = 10 ;
                 y = 25 ;
           
                 velocidad = direccion = 0 ;
              }
           } ;

int main()
           {
              // Declarar una variable de la estructura Disparo
              Disparo bala ;
           
              // Posición de la bala:
              printf("Posicion de la bala: (%d,%d)\n", bala.x, bala.y) ;
           
              return 0 ;
           }


Cuando lo ejecutemos podemos ver lo que se imprime en la pantalla. Los valores están dependiendo de cómo se iniciaron.

Suponiendo que sabemos usar funciones. Como los constructores son como las funciones, estos también pueden contener argumentos, también denominados parámetros. Ejemplo:
Código: Seleccionar todo
   // Constructor
              Disparo(int aX, int aY, float aVelocidad, float
           aDireccion)
              {
                 // Aquí que debe hacer el constructor
           
                 // Iniciar datos
                 x = aX ;
                 y = aY ;
           
                 velocidad = aVelocidad ;
                 direccion = aDireccion ;
              }


Y ahora cuando declaremos una variable de la estructura la iniciaremos de esta manera:

Código: Seleccionar todo
   // Declarar una instancia del objeto Disparo
              Disparo bala(50, 45, 10, 270) ;


Y vemos que funciona correctamente. Pero ahora dejando todo como esta declaremos la variable como lo hemos hecho antes, sin usar ningún parámetro, así:

Código: Seleccionar todo
   // Declarar una instancia del objeto Disparo
              Disparo bala ;


Con esto podemos ver que el compilador nos da un error que dice que no encuentra el constructor por defecto al cual ejecutar. Y un constructor por defecto se le dice a un constructor sin parámetros. Por suerte tenemos la posibilidad de declarar varios constructores. Y el compilador verá automáticamente cual es el constructor apropiado, dependiendo de esa serie de parámetros.

Si la cantidad de parámetros de dos constructores es la misma el compilador no te dejará realizar esa acción, a menos que el tipo de dato de los parámetros sea distinto. El compilador vera que tipo de variable es el parámetro que le estas proporcionando y verá con que constructor concuerda.

Bueno, ahora prosigamos añadiendo un constructor por defecto a nuestra estructura:


Código: Seleccionar todo
      Disparo()
              {
                 // Aquí que debe hacer el constructor
           
                 // Iniciar datos
                 x = y = velocidad = direccion = 0  ;
              }


Lo ideal de hacer un constructor por defecto es iniciar todos sus valores en 0 o en un valor inicial general. Para finalizar ahora agregaremos otro constructor que requiera solamente dos parámetros, la posición (x,y), y que inicie sus otros datos en un valor inicial. Así:

Código: Seleccionar todo
   Disparo(int bX, int bY)
              {
                  x = bX ;
                  y = bY ;
                 
                  velocidad = 0;
                  direccion = 0;
              }


Con esto ya finalizamos son las estructuras. Más tarde vendrían las clases que son aún mas complejas.

saludos
Avatar de Usuario
julen26
 
Mensajes: 10
Registrado: Dom May 13, 2007 3:04 pm

Volver a Artículos, traducciones y documentación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado