IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Déclarer une classe visible de tout le monde


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Déclarer une classe visible de tout le monde
    Hello,

    Je fais un programme avec une classe qui contient un ensembles d'options globales, qui n'aura qu'une seule instance, et qui devra pouvoir ête consultée par tout le monde.

    Y a-t-il une manière plus propre de faire cela, sans déclarer un pointeur global vers cette classe, puis de lui affecter uen instance en cours d'exécution du programme ?

    Merci.

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut
    Il faut que tu crées une classe et que tu y définisses des méthodes statiques et publiques.

    Ainsi tu pourras appeler ces méthodes en faisant un simple nomClasse::maMethode(...).

    Pour que ta classe soit "visible" de partout, il suffira d'inclure le fichier d'en-tête partout :-)

    Edit : cherche aussi comment concevoir un "Singleton" en C++. il s'agit justement d'une classe qui vise à n'être instanciée qu'une seule fois. Je crois qu'il y a pas mal de petites choses à définir (constructeurs, opérateurs, etc.) pour qu'un Singleton soit correct. J'ai eu des cours en java là dessus et c'était sacrément tordu.

    Bon courage !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 265
    Points : 284
    Points
    284
    Par défaut
    Peut etre que ceci répond a ta question :
    http://support.microsoft.com/kb/460664/fr

  4. #4
    Membre habitué Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par oodini
    qui n'aura qu'une seule instance, et qui devra pouvoir ête consultée par tout le monde.
    Renseigne toi sur le Singleton, une design pattern qui a ses caracteristiques.

    Cela dit, cette histoire de classes qui contient des options globales, ca me semble un affreux bidouillage. Que veux tu faire exactement ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par jomeo
    Il faut que tu crées une classe et que tu y définisses des méthodes statiques et publiques.

    Ainsi tu pourras appeler ces méthodes en faisant un simple nomClasse::maMethode(...).

    Pour que ta classe soit "visible" de partout, il suffira d'inclure le fichier d'en-tête partout :-)!
    Ca m'a l'air d'être la bonne méthode.

    Merci.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Ksempac
    Renseigne toi sur le Singleton, une design pattern qui a ses caracteristiques.
    Je crois savoir que son seul intérêt, c'est de s'assurer qu'on ne peut avoir qu'une seule instance ?
    Dans ma cas, ce n'est pas impératif de poser cette contrainte. Je maîtrise totalement mon code, et personne d'autre que moi ne risque d'instancier une seconde fois la classe. :-)
    Mon principal problème était la visibilité.

    Citation Envoyé par Ksempac
    Cela dit, cette histoire de classes qui contient des options globales, ca me semble un affreux bidouillage. Que veux tu faire exactement ?
    Pour simplifier, disons que j'ai un main() (bien qu'en fait, je fasse un plug-in d'une autre appli.. mais bon..), et que je définis l'instance d'un noeud qui contiendra un ensemble d'informations.

    Viennent ensuite toute une série de classes, dont des instances sont définies dans le main(), qui devront exploiter les données présentes dans cette instance de classe d'options.

    Une solution serait de passer en paramètre à chacun des constructeurs de toutes ces classes une références vers l'objeyt contenant les options, mais ça me paraît un peu stupide de me cogner un paramètre supplémentaire pour chacune des classes.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,
    Citation Envoyé par oodini
    Je crois savoir que son seul intérêt, c'est de s'assurer qu'on ne peut avoir qu'une seule instance ?
    Dans ma cas, ce n'est pas impératif de poser cette contrainte. Je maîtrise totalement mon code, et personne d'autre que moi ne risque d'instancier une seconde fois la classe. :-)
    Mon principal problème était la visibilité.
    ...jusqu'au jour où quelqu'un viendra te donner un coup de main et, parce qu'il n'aura pas compris l'idée de ta classe, essayera d'en implémenter une seconde...

    S'il est vrai que le patern singleton a, entre autre, l'avantage de ne pouvoir etre instancié qu'une fois, il a aussi l'avantage de pouvoir partager une instance unique partout
    Pour simplifier, disons que j'ai un main() (bien qu'en fait, je fasse un plug-in d'une autre appli.. mais bon..), et que je définis l'instance d'un noeud qui contiendra un ensemble d'informations.

    Viennent ensuite toute une série de classes, dont des instances sont définies dans le main(), qui devront exploiter les données présentes dans cette instance de classe d'options.

    Une solution serait de passer en paramètre à chacun des constructeurs de toutes ces classes une références vers l'objeyt contenant les options, mais ça me paraît un peu stupide de me cogner un paramètre supplémentaire pour chacune des classes.
    Pourquoi à toutes les fonctions

    Tu peux très bien déclarer une référence ou un pointeur vers ta classe conteneur comme membre de tes autres classes, et te contenter de le passer en parametre au constructeur...

    Le conteneur étant alors membre de chacune de tes classes, il sera aisé d'y accéder au sein meme des classes

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par koala01
    S'il est vrai que le patern singleton a, entre autre, l'avantage de ne pouvoir etre instancié qu'une fois, il a aussi l'avantage de pouvoir partager une instance unique partout
    Je ne savais pas ça.
    Je vais donc essayer le singleton. :-)

    Citation Envoyé par koala01
    Tu peux très bien déclarer une référence ou un pointeur vers ta classe conteneur comme membre de tes autres classes, et te contenter de le passer en parametre au constructeur...
    C'est ce que je voulais éviter.

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Citation Envoyé par oodini
    C'est ce que je voulais éviter.
    Tu as surement des raisons valables... mais penses quand meme qu'un pointeur, ca ne prend que quelques octets en mémoire...(32 bits, sur mon athlon XP)

    Si la seule raison que tu aies est celle d'essayer de préserver la mémoire, ca peut valoir la peine de reconsidérer la question

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Ceci dit, comprenons nous bien sur la valeur du terme "partout" que j'ai utilisé deux messages plus haut...

    Il s'agit bien des unités de traductions dans lesquelles, par jeu d'inclusions interposées, il y a non seulement la délcaration de ta classe singleton, mais aussi la définition d'une instance de celui-ci

  11. #11
    Membre confirmé
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Points : 563
    Points
    563
    Par défaut
    Le débat tout statique contre singleton est infini.

    Ce qu'on peut en retirer, c'est que le singleton offre un avantage important par rapport au tout statique : il fournit un point d'entrée unique ( son constructeur ) ce qui te permet d'avoir une initialisation sure.

Discussions similaires

  1. Déclarer une classe Static
    Par remibeginer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/05/2008, 16h00
  2. où déclarer une fonction utilisée dans toutes mes jsp ?
    Par aurelientp dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 22/02/2008, 10h38
  3. Réponses: 5
    Dernier message: 21/10/2007, 13h33
  4. comment déclarer une Class
    Par root16 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/11/2006, 13h20
  5. [POO] Une classe qui fait tout ?
    Par Nasky dans le forum Langage
    Réponses: 23
    Dernier message: 26/05/2006, 20h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo