Cita:
Iniciado por aguml 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 originalclass Padre
{
public:
Padre(int algo);
};
class Hija : public Padre
{
public:
Hija()
: Padre(5) // Invocamos al constructor Padre(int)
{ }
};
Cita:
Iniciado por aguml 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 originalstruct Posicion
{
// Están declaradas AQUI!!!!
size_t fila;
size_t columna;
Posicion(size_t fila, size_t columna)
: fila(fila),
columna(columna)
{ }
};
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 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.