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 :

[debutant] switch et new()


Sujet :

C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut [debutant] switch et new()
    bonjour à tous,

    j'ai un problème tout bête:
    J'ai une fonction toto(UINT uiType). Dans cette fonction, je voudrais créer une instance MonObjet dont la classe sera en fonction de mon paramètre uiType.
    voici mon code, vous comprendrez direc:
    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
    fonction toto(UINT uiType)
    {
    swicth(uiType)
       {
       case 1:
          MaClasse1 MonObjet();
          ...
          break;
     
       case 2:
          MaClasse2 MonObjet();
          ...
          break;
     
       // etc.
       }
    }
    Evidemment, je ne peux pas faire ça, puisque il est interdit de faire une déclaration dans un switch.
    Mes classes MaClasse1 et MaClasse2 héritent d'une classe MaClasse.

    Comment faire?

    P.S: en réalité, mon switch porte sur une vingtaine de valeurs.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    J'ai poster un problème assez similaire sauf que c'était la classe qui changé. Je le faisait avec des pointeurs, dans switch je faisait avec new mais ca marche moyen, c'est peut être du fait qu'on ne peut pas déclarer dans switch.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le moyen de contourner ça est d'englober tes 'case' comportant des déclarations, dans des blocs d'accolades.

    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
    fonction toto(UINT uiType)
    {
    swicth(uiType)
    {
       case 1:
       {
          MaClasse1 MonObjet();
          ...
          break;
       }
     
       case 2:
       {
          MaClasse2 MonObjet();
          ...
          break;
       }
     
       // etc.
    }
    }
    Cette fonction fait quoi exactement ? Ca me paraît bizarre, surtout que toutes ces classes dérivent d'une même base.

    PS : attention avec les parenthèses -- là tu n'instancies pas tes classes, tu déclares à chaque fois des fonctions. Je ne pense pas que ce soit le but recherché.

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Loulou24
    Cette fonction fait quoi exactement ? Ca me paraît bizarre, surtout que toutes ces classes dérivent d'une même base.
    Oui, moi aussi ça me parait bizzare d'ête obligé de faire ça. Je dois faire une erreur de conception.
    En fait, je dois créer une carte. Je récupère des données sur une bdd. Pour chacune de ces données, j'appelle cette fonction toto(). En vérité, cette fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    createPoint(UINT x, UINT y, UINT type)
    et je dois créer un "Point" (un point sur une carte), qui peut être de type Entrepot, Agence, Magasin, etc... yen a une vingtaine. J'ai donc une classe Point, et plein d'autres qui en héritent.

    Citation Envoyé par Loulou24
    PS : attention avec les parenthèses -- là tu n'instancies pas tes classes, tu déclares à chaque fois des fonctions. Je ne pense pas que ce soit le but recherché.
    Là-dessus aussi j'ai un soucis de conception. En vérité, ma fonction createPoint est une méthode d'une classe Map. Dans cette classe Map, j'ai une liste de Point. Je voudrais donc que mes objets de type Point (ou classe qui en hérite) soient alloués dans ma classe Map. Il faut donc que je fasse un new c'est ça?

    J'espère que je suis clair

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui, tu devrais plutôt avoir un truc de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void CMap::createPoint(UINT x, UINT y, UINT type)
    {
        switch (type)
        {
            case TILE_XXX : m_Tiles[x][y] = new TileXXX(...); break;
            case TILE_YYY : m_Tiles[x][y] = new TileYYY(...); break;
            case TILE_ZZZ : m_Tiles[x][y] = new TileZZZ(...); break;
            // ...
        }
    }
    Mais comme dit précédemment pour Azharis, ce n'est pas le meilleur design et il vaudra mieux passer par une fabrique.

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    ok. Aurais-tu un bon lien sur le pattern factory stp?

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Là comme ça je n'ai rien sous la main, mais je suis certain que Google en as des tas

  8. #8
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    ok

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/10/2007, 09h38
  2. [debutant] Pb de switch
    Par Xhéras dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/08/2006, 12h52
  3. [debutant]Portée d'un objet et creation avec new
    Par harsh dans le forum Débuter
    Réponses: 7
    Dernier message: 17/05/2006, 17h21
  4. [FLASH] pb debutant
    Par ultrakas dans le forum Flash
    Réponses: 2
    Dernier message: 05/06/2003, 00h48
  5. [] Insérer DE et Datareport existant ds new projet
    Par khany dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/01/2003, 09h52

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