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 :

Namespace et inclusion de classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut Namespace et inclusion de classes
    Bonjour,

    J'ai plusieurs classes outils que je voudrais regrouper dans une classe ou dans un namespace Outils.

    Mes outils sont des classes normales :
    Une classe A avec son .h et .cpp
    Une classe B avec son .h et .cpp

    Je voudrais appeler mes classes et leurs méthodes (toutes statiques) de cette manière :

    Outil::A::MethodeDeA();
    Outil::B::MethodeDeB();

    Que choisir, namespace ou classe ?
    Dans les deux cas comment faire pour inclure des classes déjà définies (.h et .cpp) dans un namespace ou une classe. Je n'ai pas trouvé d'exemples.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include "a.h"
    #include "b.h"
     
    namespace Outils
    {
       ....//Quoi mettre ??
    }
     
    // Ou bien avec une classe
     
    class Outils
    {
       ....//Quoi mettre ??
    };

    Merci.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Les namespaces, je les utilise comme classement de haut niveau, en général mes fonctions, même statiques, sont dans une classe - surtout quand elles sont génériques -.

    Pour ta deuxième question, c'est dans les .h et les .cpp qu'on ajoute les namespace, on ne le fait jamais à l'extérieur des fichiers dans lesquels les classes et fonctions ont été définies. C'est la porte ouverte aux erreurs d'édition des liens, de compilation, ...

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Si tu veux regrouper A et B sous forme d'un héritage par exemple, ou créer des classes personnelles qui dérivent de l'une ou l'autre, tu a intéret à utiliser des classes...

    Si, parce que les classes A et B se trouvent dans des espaces de nommages (trop) différents, tu veux "simplement" les mettre toutes les deux dans le meme espace de nommage pour la facilité, tu peux envisager de les rajouter à ton espace de nommage sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #ifndef TON_FICHIER_ENTETE_H
    #define TON_FICHIER_ENTETE_H
    #include "classea.h"
    #include "classb.h"
    namespace espacedenommage
    {
        using ::ClasseA;// à adapter selon l'espace de nomage dans lequel elle se
                             //trouve
        using ::ClasseB; //idem
    };
    ou, pour les structure venant du C, un peu comme ce qui se fait dans ctime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <cstddef>
     
    #include <time.h>
     
    // Get rid of those macros defined in <time.h> in lieu of real functions.
    #undef clock
    #undef difftime
    #undef mktime
    #undef time
    #undef asctime
    #undef ctime
    #undef gmtime
    #undef localtime
    #undef strftime
     
    namespace std
    {
      using ::clock_t;
      using ::time_t;
      using ::tm;
     
      using ::clock;
      using ::difftime;
      using ::mktime;
      using ::time;
      using ::asctime;
      using ::ctime;
      using ::gmtime;
      using ::localtime;
      using ::strftime;
    }
    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

  4. #4
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Merci pour vos réponses, je sais donc maintenant le faire avec les namespaces.

    Par contre j'en reviens aux classes (ma première idée au départ), je pense que ce qu'il me manque c'est plus la syntaxe qu'autre chose. On fait habituellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class Outil
    {
    public:
     
        class A
        {
        public:
            static void maMethodeA();
        }
        class B
        {
        public:
            static void maMethodeB();
        }
     
    };
    On peut ensuite appeler nos méthodes par Outil::A::maMethodeA();

    Moi mes classes sont déclarés dans des .h et .cpp externes à outil.h, alors comment faire pour les amener dans la classe Outil ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Outil
    {
    public:
         // Que mettre ici ?
    };
    A la base je n'avais qu'une classe Outil et mes fichiers .h et cpp sont devenus trop gros. J'ai donc pensé à regrouper les outils de fonctions proches dans des classes dédiées, puis regrouper toutes les classes dans une classe générique Outil (ou un namespace, c'est de la que venait mon questionnement).

    Merci.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Dans ton cas, c'est plus un namespace qu'une classe.
    Si tu fais ça avec des classes, tu feras des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Outil::A::mamethodeA()
    {
    }
    Et avec des namespaces, ça sera beaucoup plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    namespace Outil
    {
      namespace A
      {
        void mamethoedeA()
        {
        }
      }
    }

  6. #6
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Merci Miles. Finalement j'ai utilisé un namespaces Outil pour rassembler toutes mes classes dedans et ca fonctionne parfaitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/10/2014, 10h25
  2. Réponses: 9
    Dernier message: 26/03/2009, 11h43
  3. Réponses: 3
    Dernier message: 06/02/2007, 15h13
  4. Inclusion de classes / problème de déclaration
    Par scal-80 dans le forum C++
    Réponses: 5
    Dernier message: 21/06/2006, 16h28
  5. Réponses: 4
    Dernier message: 13/07/2005, 14h56

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