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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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 confirmé
    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
    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 expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

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

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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.

  5. #5
    Membre expérimenté Avatar de Ksempac
    Inscrit en
    Février 2007
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 165
    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 ?

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    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
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    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
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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