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] Incompr�hension avec un classe abstraite


Sujet :

C++

  1. #1
    Invit�
    Invit�(e)
    Par d�faut [Namespace] Incompr�hension avec un classe abstraite
    Bonsoir

    Voil�, j'ai quelques doutes sur ma compr�hension des namespace.
    En effet, j'ai dans mon projet une classe abstraite Personnage. Celle-ci d�crit des m�thodes communes � ses filles, � savoir Guerrier, Sorcier...

    Pour facilier la compr�hension du code, et pour ne pas bloquer les noms de m�thodes dans l'ensemble du programme, j'ai voulu cr�� un classement � l'aide des espaces de nom.

    J'ai donc, dans un premier temps, mis ma classe Personnage dans un namespace Personnage.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    namespace Personnage {
    class Personnage
    { ... };
     
    } // FIN namespace
    Donc une premi�re question : cela ne risque-t-il pas de poser certains probl�mes lors du d�veloppement, �tant donn� que l'espace de nom poss�de le m�me nom que la classe ?



    Ensuite, j'ai fais comme suit au classes filles :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace Personnage {
       namespace Classe {
     
    class Guerrier : public Personnage
    { ... };
     
       } // FIN GUERRIER
    } // FIN namespace

    Donc, pour d�clarer un guerrier, je fais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Personnage::Classe::Guerrier warrior;
    Ce code fonctionne.
    Seulement, je pensais que je n'�tais pas oblig� de cr�er l'espace de nom Personnage, �tant donn� que je d�clare une classe du m�me nom.
    Donc je croyais que :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Personnage::Guerrier warrior; //(sans l'espace de nom Classe)
    ou
    Personnage::Classe::Guerrier warrior; // (avec l'espace de nom Classe)
    fonctionnaient tout aussi bien.

    Mais je me rend compte que ce n'est pas le cas. La compilation �chouant.
    Pour ma part, je pr�sume que �a vient du fait que la classe Personnage est abstraite (donc non instanciable).



    Si certains peuvent �claircir ma petite lanterne, je suis tout ou�e
    Derni�re modification par Invit� ; 26/03/2009 � 09h43.

  2. #2
    Membre chevronn�
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    D�tails du profil
    Informations personnelles :
    �ge : 37
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Par d�faut
    Bonjour,
    Un namespace peux avoir le m�me non qu'une classe il y a aucun probl�me.
    Par contre le mot cle class dans C++ ne prend pas de e.
    A bient�t

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par wakan Voir le message
    Par contre le mot cle class dans C++ ne prend pas de e.
    A bient�t
    Au temps pour moi, c'est une erreur de frappe.
    Merci

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonsoir,
    Citation Envoy� par Furanku Voir le message
    J'ai donc, dans un premier temps, mis ma classe Personnage dans un namespace Personnage.
    J'y vois surtout un risque de confusion ... pour celui qui voudra relire le code dans 6 mois (et peut-�tre m�me avant). Pour reprendre les propos d'un sage qui murmure � l'oreille des d�veloppeurs : "un code est plus souvent relu qu'ex�cut�."

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Au niveau de la compr�hension, je me doute que �a peut porter � confusion. Ce que je voulais r�ellement savoir c'est si �a fonctionnait en dehors de ce probl�me de compr�hension.

    Je changerai le nom de la classe m�re plut�t que du namespace
    Par contre, simple question de v�rification : une classe d�riv�e ne fait pas partie du namespace de sa classe m�re ?

    Je veux dire, on ne peut pas faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Personnage::Guerrier warrior;
    si Guerrier h�rite de Personnage.

    J'arrive pas tr�s bien � comprendre pourquoi, �tant donn� que Guerrier est un type de Personnage.

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 35
    Par d�faut
    Pour instancier une classe, tu "creuses" dans les espaces de noms, pas dans les classes parentes.

    Donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    Personnage::Guerrier warrior;
    n'est pas valide car le namespace Personnage ne contient que la classe Personnage.

    Tu es oblige de passer par le namespace Personnage, puis le namespace Classe. Par contre, je ne comprend pas pourquoi le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Personnage::Classe::Guerrier warrior; // (avec l'espace de nom Classe)
    ne compile pas (a moins que le probl�me soit ailleurs).


    De la m�me mani�re, tu aurais pu d�clarer la classe Guerrier de la mani�re suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class Guerrier :: Personnage::Personnage
    {
       ...
    }

    Je remarque d'ailleurs que dans ton code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace Personnage {
       namespace Classe {
     
    class Guerrier
    { ... };
     
       } // FIN GUERRIER
    } // FIN namespace
    Personnage::Classe::Guerrier, ne d�rive pas de Personnage:: Personnage. Il y a peut �tre une autre incompr�hension sur ce point.

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par Solkien Voir le message
    Par contre, je ne comprend pas pourquoi le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Personnage::Classe::Guerrier warrior; // (avec l'espace de nom Classe)
    ne compile pas (a moins que le probl�me soit ailleurs).
    Pas de soucis de ce c�t� l�, �a compile sans probl�me (si bien s�r je d�clare les espace de nom Personnage et Classe).
    Mais je pensais que sans espace de nom d�clar�, on pouvait d�clarer une classe d�riv�e de la mani�re suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ClasseMere::ClasseFille objet;

    Citation Envoy� par Solkien Voir le message
    De la m�me mani�re, tu aurais pu d�clarer la classe Guerrier de la mani�re suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class Guerrier :: Personnage::Personnage
    {
       ...
    }
    Tu voulais dire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class Guerrier : public Personnage::Personnage
    {
       ...
    }
    ?
    Dans le cas contraire, je ne comprend pas


    Citation Envoy� par Solkien Voir le message
    Je remarque d'ailleurs que dans ton code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    namespace Personnage {
       namespace Classe {
     
    class Guerrier
    { ... };
     
       } // FIN GUERRIER
    } // FIN namespace
    Personnage::Classe::Guerrier, ne d�rive pas de Personnage:: Personnage. Il y a peut �tre une autre incompr�hension sur ce point.
    Oui, c'est juste une seconde mauvaise saisie de ma part. La classe Guerrier h�rite bien de Personnage dans mon programme

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Je pense que le code :

    ne compile pas car tu es � l'int�rieur du namespace Personnage.

    Comme tu es � l'int�rieur du namespace Personnage, que Personnage existe dans ce namespace, il cherche Guerrier... dans la classe Personnage.

    devrait compiler.

    Mais comme tu peux le constater, c'est source de confusion et je ne saurais que te d�conseiller d'avoir un namespace et une classe de m�me nom dans ce namespace.

    D'ailleurs, je ne suis pas grand fan des namespaces, pour moi, une lib = un namespace, et pour tout ce qui est dans le main, pas besoin de namespace.

  9. #9
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par white_tentacle Voir le message
    D'ailleurs, je ne suis pas grand fan des namespaces, pour moi, une lib = un namespace, et pour tout ce qui est dans le main, pas besoin de namespace.
    Disons qu'il faut savoir ne pas en abuser. Je pense aussi qu'un namespace doit avoir une coh�rence : regrouper des choses qui vont ensemble... et qui pourrait effectivement correspondre � une lib.

  10. #10
    Invit�
    Invit�(e)
    Par d�faut
    Merci de vos r�ponses, je pense que je vais faire autrement. Le code n'est pas forc�ment plus clair avec.

    Bonne journ�e

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [2.x] Relation 1n avec des class abstraites
    Par pou4ever dans le forum Symfony
    R�ponses: 0
    Dernier message: 16/01/2014, 11h58
  2. probleme Avec les classes Abstraites
    Par thibaultc dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 02/12/2013, 10h58
  3. JFace Databinding avec une classe abstraite
    Par anthony.pa dans le forum SWT/JFace
    R�ponses: 0
    Dernier message: 03/09/2013, 17h01
  4. probl�me avec les classes abstraite avec C#
    Par takfa2008 dans le forum C#
    R�ponses: 1
    Dernier message: 29/06/2009, 10h25
  5. Probl�me d'h�ritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    R�ponses: 7
    Dernier message: 22/03/2008, 10h37

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