[C con Clase] Resumen de Cconclase, Vol 117, Envío 7

Lázaro VG lazarozrl en gmail.com
Mar Abr 26 00:39:29 CEST 2016


Otra opción que tienes es crear una clase, dentro de ella declaras las
variables como "static" y en cada parte del programa que debas utilizarlas,
creas una instancia de esa clase y utilizas las variables. El hecho de
haberlas declarado como static tendrán el mismo valor en todas las
instancias dado que es el mismo lugar de memoria, es decir, el espacio de
memoria donde están sus datos es usado por todas las instancias de esa
clase (miembros static).

otra opción pero más lenta es guardar esos valores en registro de windows,
con la merma en velocidad que dará la lectura y escritura en el registro y
los privilegios que pudiera pedir Windows. Esta última opción sería útil si
quieres conservar esos valores incluso después de terminada la aplicación y
reutilizarlos en futuras ejecuciones de tu aplicación o por otros programas
ajenos al tuyo.

¡Salu2!

El 25 de abril de 2016, 0:25, <cconclase-request en listas.conclase.net>
escribió:

> Envíe los mensajes para la lista Cconclase a
>         cconclase en listas.conclase.net
>
> Para subscribirse o anular su subscripción a través de la WEB
>
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> O por correo electrónico, enviando un mensaje con el texto "help" en
> el asunto (subject) o en el cuerpo a:
>         cconclase-request en listas.conclase.net
>
> Puede contactar con el responsable de la lista escribiendo a:
>         cconclase-owner en listas.conclase.net
>
> Si responde a algún contenido de este mensaje, por favor, edite la
> linea del asunto (subject) para que el texto sea mas especifico que:
> "Re: Contents of Cconclase digest...". Además, por favor, incluya en
> la respuesta sólo aquellas partes del mensaje a las que está
> respondiendo.
>
>
> Asuntos del día:
>
>    1. Tener una clase con miembros accesibles en cualquier archivo
>       de la aplicación. (marcelinux)
>    2. Re: Tener una clase con miembros accesibles en cualquier
>       archivo de la aplicación. (Yolmer Rosales)
>    3. Re: Tener una clase con miembros accesibles en cualquier
>       archivo de la aplicación. (Davidson, Steven)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Sun, 24 Apr 2016 21:32:00 +0200
> From: marcelinux <marcelinator en gmail.com>
> To: cconclase en listas.conclase.net
> Subject: [C con Clase] Tener una clase con miembros accesibles en
>         cualquier archivo de la aplicación.
> Message-ID: <E1auPlA-0004S9-6d en ender.h3m.com>
> Content-Type: text/plain; charset=UTF-8
>
> Hola.
> La idea es tener una clase con miembros accesibles en cualquier archivo de
> la aplicación.
>
> Imaginemos que tengo una aplicación en la que necesitaré unas variables
> globales.
> Cuando digo globales, no me refiero al mismo archivo, sino a todos los
> archivos de la aplicación.
> Por ejemplo: En el archivo main.cpp declaro unas variables globales.
> En otro archivo donde se define una clase, quiero usar aquellas globales.
> Para ello, declararía las globales con extern.
> Lo haría más o menos así:
>
> Archivo main.cpp
> // Usar variables en otro archivo
> #include <iostream>
> #include <string>
> #include "clase.h"
>
> // Definir las variables globales
> int global1;
> float global2;
> std::string global3;
>
> int main()
> {
>     std::cout << "Asignar valores a las variables globales." << std::endl;
>     global1 = 123;
>     global2 = 123.45;
>     global3 = "cadena global";
>     std::cout << "global1 = " << global1 << std::endl;
>     std::cout << "global2 = " << global2 << std::endl;
>     std::cout << "global3 = " << global3 << std::endl;
>
>     // Accedemos a la clase donde operaremos con las variables globales
>     Clase miClase;
>     miClase.mostrar();
>
>     return 0;
> }
>
> Archivo clase.h
> #ifndef CLASE_H
> #define CLASE_H
> // Clase.
> // Mostrará las variables globales externas
> class Clase
> {
>     public:
>         void mostrar();
> };
> #endif // CLASE_H
>
> Archivo clase.cpp
> // Definición de Clase
> #include <iostream>
> #include <string>
> #include "clase.h"
>
> extern int global1;
> extern float global2;
> extern std::string global3;
>
> void Clase::mostrar()
> {
>     std::cout << "Valor de global1 desde la clase: " << global1 <<
> std::endl;
>     std::cout << "Valor de global2 desde la clase: " << global2 <<
> std::endl;
>     std::cout << "Valor de global3 desde la clase: " << global3 <<
> std::endl;
>     return;
> }
>
> Y la pregunta es:
> ¿Cómo podría "agrupar" esas variables en una "struct" o "class"?
> Si hago algo como extern class varGlobales;
> el compilador me devuelve un error: a storage class can only be specified
> for objects and functions
>
> Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409
>
> Muchas gracias.
>
> ------------------------------
>
> Message: 2
> Date: Sun, 24 Apr 2016 20:50:01 -0430
> From: Yolmer Rosales <yolmer.rosales en gmail.com>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Tener una clase con miembros accesibles en
>         cualquier archivo de la aplicación.
> Message-ID:
>         <CAGTFLE8V5iO3Ne7SbXVnm7i9=_
> 9akmwZw6nzLgeGwFMWCvpHiQ en mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> ¿Por qué no simplemente la metes dentro de la clase?
> si la vas a utilizar dentro de la clase tal vez son parte de los atributos
>
> también la puedes pasar como parámetros a la clase...
>
> Por último puedes hacer un archivo de cabecera que contenga las variables e
> incluirlo en la definición de clase y el main
>
>
> no se es lo que se me ocurre
>
> El 24 de abril de 2016, 15:02, marcelinux <marcelinator en gmail.com>
> escribió:
>
> > Hola.
> > La idea es tener una clase con miembros accesibles en cualquier archivo
> de
> > la aplicación.
> >
> > Imaginemos que tengo una aplicación en la que necesitaré unas variables
> > globales.
> > Cuando digo globales, no me refiero al mismo archivo, sino a todos los
> > archivos de la aplicación.
> > Por ejemplo: En el archivo main.cpp declaro unas variables globales.
> > En otro archivo donde se define una clase, quiero usar aquellas globales.
> > Para ello, declararía las globales con extern.
> > Lo haría más o menos así:
> >
> > Archivo main.cpp
> > // Usar variables en otro archivo
> > #include <iostream>
> > #include <string>
> > #include "clase.h"
> >
> > // Definir las variables globales
> > int global1;
> > float global2;
> > std::string global3;
> >
> > int main()
> > {
> >     std::cout << "Asignar valores a las variables globales." <<
> std::endl;
> >     global1 = 123;
> >     global2 = 123.45;
> >     global3 = "cadena global";
> >     std::cout << "global1 = " << global1 << std::endl;
> >     std::cout << "global2 = " << global2 << std::endl;
> >     std::cout << "global3 = " << global3 << std::endl;
> >
> >     // Accedemos a la clase donde operaremos con las variables globales
> >     Clase miClase;
> >     miClase.mostrar();
> >
> >     return 0;
> > }
> >
> > Archivo clase.h
> > #ifndef CLASE_H
> > #define CLASE_H
> > // Clase.
> > // Mostrará las variables globales externas
> > class Clase
> > {
> >     public:
> >         void mostrar();
> > };
> > #endif // CLASE_H
> >
> > Archivo clase.cpp
> > // Definición de Clase
> > #include <iostream>
> > #include <string>
> > #include "clase.h"
> >
> > extern int global1;
> > extern float global2;
> > extern std::string global3;
> >
> > void Clase::mostrar()
> > {
> >     std::cout << "Valor de global1 desde la clase: " << global1 <<
> > std::endl;
> >     std::cout << "Valor de global2 desde la clase: " << global2 <<
> > std::endl;
> >     std::cout << "Valor de global3 desde la clase: " << global3 <<
> > std::endl;
> >     return;
> > }
> >
> > Y la pregunta es:
> > ¿Cómo podría "agrupar" esas variables en una "struct" o "class"?
> > Si hago algo como extern class varGlobales;
> > el compilador me devuelve un error: a storage class can only be specified
> > for objects and functions
> >
> > Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409
> >
> > Muchas gracias.
> > _______________________________________________
> > 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
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160424/3a8a546e/attachment-0001.html
> >
>
> ------------------------------
>
> Message: 3
> Date: Mon, 25 Apr 2016 02:33:17 -0400
> From: "Davidson, Steven" <srd4121 en njit.edu>
> To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
> Subject: Re: [C con Clase] Tener una clase con miembros accesibles en
>         cualquier archivo de la aplicación.
> Message-ID:
>         <CAFBM+1zoGzxcGsuVLe0cA4Rz9GHxBC5u2NT1zs4E10UF=
> eTKRQ en mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Hola Marcelinux,
>
> Para agrupar entidades, puedes usar espacios denominados (namespaces, en
> inglés), aunque la preparación es básicamente la misma que has hecho,
> excepto que creas tu propio ámbito. Por ejemplo,
>
> // main.cpp
>
> namespace ns
> {
> int global1;
> float global2;
> std::string global3;
> }
>
> int main()
> {
>   ns::global1 = 123;
>   ns::global2 = 123.45f;
>   ns::global3 = "cadena global en 'ns'";
>
>   std::cout << "global1 = " << ns::global1 << std::endl;
>   std::cout << "global2 = " << ns::global2 << std::endl;
>   std::cout << "global3 = " << ns::global3 << std::endl;
>
>   Clase miClase;
>   miClase.mostrar();
>
>   return 0;
> }
>
>
> // clase.cpp
>
> namespace ns
> {
> extern int global1;
> extern float global2;
> extern std::string global3;
> }
>
> void Clase::mostrar()
> {
>   std::cout << "Valor de global1 desde el espacio denominado: " <<
> ns::global1 << std::endl;
>   std::cout << "Valor de global2 desde el espacio denominado: " <<
> ns::global2 << std::endl;
>   std::cout << "Valor de global3 desde el espacio denominado: " <<
> ns::global3 << std::endl;
> }
>
>
> Si de verdad quieres usar una clase, entonces sólo debes definir los
> miembros como estáticos; esto es,
>
> // main.cpp
>
> int Clase::global1;
> float Clase::global2;
> std::string Clase::global3;
>
> int main()
> {
>   Clase::global1 = 123;
>   Clase::global2 = 123.45f;
>   Clase::global3 = "cadena global";
>   std::cout << "global1 = " << Clase::global1 << std::endl;
>   std::cout << "global2 = " << Clase::global2 << std::endl;
>   std::cout << "global3 = " << Clase::global3 << std::endl;
>
>   Clase miClase;
>   miClase.mostrar();
>
>   return 0;
> }
>
>
> // clase.cpp
>
> void Clase::mostrar()
> {
>   std::cout << "Valor de global1 desde la clase: " << Clase::global1 <<
> std::endl;
>   std::cout << "Valor de global2 desde la clase: " << Clase::global2 <<
> std::endl;
>   std::cout << "Valor de global3 desde la clase: " << Clase::global3 <<
> std::endl;
> }
>
>
> Espero que esto te sirva.
>
> Steven
>
>
> 2016-04-24 15:32 GMT-04:00 marcelinux <marcelinator en gmail.com>:
>
> > Hola.
> > La idea es tener una clase con miembros accesibles en cualquier archivo
> de
> > la aplicación.
> >
> > Imaginemos que tengo una aplicación en la que necesitaré unas variables
> > globales.
> > Cuando digo globales, no me refiero al mismo archivo, sino a todos los
> > archivos de la aplicación.
> > Por ejemplo: En el archivo main.cpp declaro unas variables globales.
> > En otro archivo donde se define una clase, quiero usar aquellas globales.
> > Para ello, declararía las globales con extern.
> > Lo haría más o menos así:
> >
> > Archivo main.cpp
> > // Usar variables en otro archivo
> > #include <iostream>
> > #include <string>
> > #include "clase.h"
> >
> > // Definir las variables globales
> > int global1;
> > float global2;
> > std::string global3;
> >
> > int main()
> > {
> >     std::cout << "Asignar valores a las variables globales." <<
> std::endl;
> >     global1 = 123;
> >     global2 = 123.45;
> >     global3 = "cadena global";
> >     std::cout << "global1 = " << global1 << std::endl;
> >     std::cout << "global2 = " << global2 << std::endl;
> >     std::cout << "global3 = " << global3 << std::endl;
> >
> >     // Accedemos a la clase donde operaremos con las variables globales
> >     Clase miClase;
> >     miClase.mostrar();
> >
> >     return 0;
> > }
> >
> > Archivo clase.h
> > #ifndef CLASE_H
> > #define CLASE_H
> > // Clase.
> > // Mostrará las variables globales externas
> > class Clase
> > {
> >     public:
> >         void mostrar();
> > };
> > #endif // CLASE_H
> >
> > Archivo clase.cpp
> > // Definición de Clase
> > #include <iostream>
> > #include <string>
> > #include "clase.h"
> >
> > extern int global1;
> > extern float global2;
> > extern std::string global3;
> >
> > void Clase::mostrar()
> > {
> >     std::cout << "Valor de global1 desde la clase: " << global1 <<
> > std::endl;
> >     std::cout << "Valor de global2 desde la clase: " << global2 <<
> > std::endl;
> >     std::cout << "Valor de global3 desde la clase: " << global3 <<
> > std::endl;
> >     return;
> > }
> >
> > Y la pregunta es:
> > ¿Cómo podría "agrupar" esas variables en una "struct" o "class"?
> > Si hago algo como extern class varGlobales;
> > el compilador me devuelve un error: a storage class can only be specified
> > for objects and functions
> >
> > Mi compilador es g++ (Debian 5.3.1-14) 5.3.1 20160409
> >
> ------------ próxima parte ------------
> Se ha borrado un adjunto en formato HTML...
> URL: <
> http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160425/b1712b51/attachment.html
> >
>
> ------------------------------
>
> Subject: Pié de página del digest
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
>
> ------------------------------
>
> Fin de Resumen de Cconclase, Vol 117, Envío 7
> *********************************************
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160425/d5471b13/attachment.html>


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