Ver Mensaje Individual
  #9 (permalink)  
Antiguo 14/01/2016, 07:12
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Necesito orientacion con el siguiente codigo

Cita:
Iniciado por aguml Ver Mensaje
Además pensaba que esos dos puntos era como en las clases que se usa para indicar de cual clase deriva (no se si es correcto lo que digo). O sea:
class ClaseDerivada : public ClaseBase
Los dos puntos tienen varios usos, depende de dónde se encuentre cumple una función u otra. En el caso de declarar una herencia, esta declaración únicamente puede hacerse nada más poner el nombre de la clase, luego su uso es bastante restringido.

Una cosa que no te he comentado de usar los dos puntos en el constructor es que es el único mecanismo que te permite invocar un constructor específico del padre... en el caso de herencias, claro.

Código C++:
Ver original
  1. class Padre
  2. {
  3.   public:
  4.     Padre(int algo);
  5. };
  6.  
  7. class Hija : public Padre
  8. {
  9.   public:
  10.     Hija()
  11.       : Padre(5) // Invocamos al constructor Padre(int)
  12.    { }
  13. };

Cita:
Iniciado por aguml Ver Mensaje
Lo que no entiendo es que en este caso lo que hace es llamar a la función fila y columna que no veo declaradas en ningún sitio
Fíjate bien en el código.

Código C++:
Ver original
  1. struct Posicion
  2. {
  3.   // Están declaradas AQUI!!!!
  4.   size_t fila;
  5.   size_t columna;
  6.  
  7.   Posicion(size_t fila, size_t columna)
  8.     : fila(fila),
  9.       columna(columna)
  10.   { }
  11. };

En el constructor estoy incializando variables miembro, no variables locales, luego dichas variables tienen que estar declaradas en la clase, no en el constructor.

Cita:
Iniciado por aguml Ver Mensaje
size_t ¿es una estructura o una clase?
size_t es un alias, es decir, un typedef. Se usa muchísimo en la STL y, si no te lo crees, mira lo que te devuelve X.size() (sustituye X por un contenedor cualquiera, incluso la clase string).

¿Por qué usar un alias en estos casos? Pues porque el tipo al que referencia el alias puede variar de un sistema a otro. Esto permite que el programa se comporte igual independientemente de la plataforma sobre la que se ejecute.

Vamos a poner un ejemplo concreto para que esto último quede más claro.

Imagínate que en tu programa esperas que un tipo de dato sea un entero de 32 bits... lo primero que puedes pensar es "uso el tipo int que son 32 bits. Eso funcionaría hasta que te topas con un sistema que al int le asigna únicamente 16 bits. Ahora si tu en vez de usar int usas un alias, pongamos int_32 y te preocupas de que ese alias apunte a int en un caso y a long en otro, pues ya tienes el problema resuelto sin tener que tocar todo el código.

PD.: para obtener tipos de tamaño conocido (8 bits, 32 bits, etc), existe la cabecera [i]stdint[/h] que te proporciona unos cuantos. Más información aquí.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.