[C con Clase] Duda sobre clases

Salvador Pozo salvador en conclase.net
Vie Mayo 17 17:07:41 CEST 2013


El pasado 2013-05-17 12:49:47, Miguel Alejandro jimenez escribió:
 
MAj> 1. Si por ejemplo tengo una clase:
MAj> class A{
MAj> public:
MAj> static int number;
MAj> };
MAj> A::number =0;
MAj> mi pregunta seria , por que no podria inicializar esta variable number
MAj> dentro de la clase directamente?.

La respuesta es no, a no ser que se trate de una constante estática.

----8<------
class A {
public:
    static const int numero=0;
};
----8<------

El motivo principal es que el estándar C++ impide hacer esas inicializaciones. El motivo subyacente es que los miembros estáticos existen independientemente de los objetos de la clase. De hecho, existen aunque no se declaren nunca objetos de esa clase, por lo tanto, hay que proporcionar un espacio para ese dato.

Como la declaración puede estar en un fichero de cabecera, que a su vez puede ser incluido desde varios ficheros C++, tenemos que asegurarnos de que sólo se inicializa el miembro estático una vez.

Con constantes estáticas sí es posible, pero sólo por el modo en que se almacenan internamente esas constantes.

MAj> Y otra duda ,es posible utilizar constructores privados? , si si , como?,
MAj> se declaran como static?

Sí se puede, y no tienen por qué ser estáticos.

El cómo es simple, basta declararlos como privados, y se definen igual tanto si son públicos como protegidos o privados.

La pregunta importante no es si se puede, sino qué utilidad puede tener un constructor privado.

Por ejemplo:
----8<------
class A {
private:
    A();
    int x;
public:
    A(int i) : x(i) {}
};
----8<------

Esta clase declara como privado el constructor por defecto, de modo que no podremos usarlo en nuestro programa, y nos obliga a usar el constructor con un parámetro de tipo int.

De modo que una declaración como:
A oA;

Daría un error.

Hay más situaciones donde se pueden usar constructores privados, como por ejemplo en los patrones "singleton".

Hasta pronto.


-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase