Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Qu'est-ce qu'un namespace ?
auteurs : LFE, Aurelien.Regat-Barrel, JolyLoic
Un namespace, ou espace de noms (parfois aussi espace de nommage, voire référentiel lexical) est une zone de déclaration d'identificateurs permettant au compilateur de résoudre les conflits de noms.
Si, par exemple, 2 développeurs définissent des fonctions avec le même nom, il y aura un conflit lors de l'utilisation de ces fonctions dans un programme. Les espaces de nommage permettent de résoudre ce problème en ajoutant un niveau supplémentaire aux identificateurs.

namespace a
{
    void toto() // première fonction toto
    {
    }
}
namespace b
{
    void toto() // seconde fonction toto()
    {
    }
}
a::toto(); // appelle la première
b::toto(); // appelle la seconde
Les namespaces offrent une alternative élégante à diverses techniques pré-namespace telles que le préfixage des noms ou l'utilisation de préprocesseur :

void mylib_fonction1();
void mylib_fonction2();
L'exemple précédent peut s'écrire ainsi grâce aux namespaces :

namespace mylib
{
    void fonction1();
    void fonction2();
}

Qu'est-ce qu'un namespace anonyme ?
auteur : Aurelien.Regat-Barrel
Un namespace anonyme est un espace de nom...sans nom.

namespace
{
    int a; // variable déclarée dans un namespace anonyme
}
Un namespace anonyme a la particularité de n'être visible que par l'unité de compilation dans laquelle il se trouve (c'est à dire le fichier compilable). Son utilité est de permettre la déclaration d'une variable/fonction/type dont la portée doit être celle du fichier.
Parce que un namespace traduit mieux la notion de portée restreinte à un fichier, il est recommandé de privilégier son usage en C++ par rapport à celui du mot-clé static utilisé dans le même but mais en C.


Comment définir l'implémentation d'une classe en l'ayant définie comme faisant partie d'un namespace ?
auteurs : LFE, Luc Hermitte, Aurelien.Regat-Barrel
Si vous avez déclaré une classe ou des fonctions dans un espace de noms :

exemple.h
namespace ns
{
    class Test
    {
    public:
        void F1();
        void F2();
    };

    void Fonction1();
    void Fonction2();
}
Il suffit de procéder de la même manière pour les implémenter, ou bien de préfixer par le nom du namespace :

exemple.cpp
namespace ns
{
    void Test::F1()
    {
    }

    void Fonction1()
    {
    }
}

// autre possibilité

void ns::Test::F2()
{
}

void ns::Fonction2()
{
}

precedent    sommaire    suivant   

Consultez les autres F.A.Q's

Valid XHTML 1.1!Valid CSS!


Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.
Certaines parties de ce document sont sous copyright Marshall Cline Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis à trois licences, en fonction des contributeurs :
- Les contributions de Clément Cunin et LFE sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et LFE tant que cette note apparaît clairement :
"Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement".
- Les contributions de Marshall Cline sont sous copyright
- Pour ce qui est des autres contributions : Copyright © 2005 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peut en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com