7
votes

Héritage et espaces de noms

J'essaie un premier programme utile orienté objet avec une utilisation de l'espace de noms. J'ai une classe de base B qui est dans l'espace de noms ns. Si j'essaie d'hériter de cela Classe de base pour obtenir le travail d'héritage, je devrais utiliser le NS :: B dans la sclérance de la classe comme ci-dessous, est-ce vraiment le cas? Ou y a-t-il une syle plus largement acceptée pour cette syntaxe d'héritage?

namespace NS
{
    class D: public NS::B{
    ...
    };
}


0 commentaires

3 Réponses :


12
votes

Si votre d est dans Nomspace ns , vous n'avez pas à qualifier ns :: B , puisque d < / code> et b sont dans la même espace de noms. Vous pouvez simplement utiliser classe D: publique B .


0 commentaires

8
votes

Lorsque vous êtes à l'intérieur de l'espace de noms NS , vous ne (1) besoin de qualifier les noms des fonctions, des classes ou d'autres entités qui sont dans le Espace de noms ns . Donné: xxx

Les deux définitions suivantes de d sont les mêmes: xxx

et: xxx


(1) recherche dépendante de l'argument (ADL) peut causer des Problèmes laids , en particulier lors de l'utilisation de modèles et pour les corriger, vous devrez peut-être pouvoir qualifier de noms.


3 commentaires

Je suppose que j'ai fait une erreur quelque part dans le makefile, c'est ce à quoi je m'attendrais aussi, merci pour les réponses de toute façon.


@Umut: Vous pouvez toujours essayer de simples demandes de renseignements comme celle-ci dans un fichier unique minimal.


Comment avez-vous ajouté la note de bas de page surélevée?



2
votes

Vous n'avez pas besoin de désigner NS depuis que vous êtes déjà à l'intérieur

#include <iostream>
int x = 10;

int main()
{
    int x = 5;
    //This will show the local x
    std::cout << x << std::endl;
    //This is how you access the Global x
    std::cout << ::x << std::endl;

    return 0;
}


0 commentaires