[C con Clase] Duda sobre clases

Miguel Alejandro Jimenez Ramirez cerberbero en gmail.com
Sab Mayo 18 17:33:07 CEST 2013


Muchas gracias por la respuesta , como siempre muy oportuna y muy clara.

Cordialmente


2013/5/17 Salvador Pozo <salvador en conclase.net>

> 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
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
MIGUEL ALEJANDRO JIMENEZ R.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130518/742b81d4/attachment.html>


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