Nous sommes actuellement le 11 Juil 2026, 11:43

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 2 message(s) ] 
Auteur Message
 Sujet du message: Design (C++)
MessagePublié: 18 Jan 2005, 17:05 
Hors-ligne
Toujours là!
Toujours là!
Avatar de l’utilisateur

Inscription : 08 Jan 2002, 14:51
Message(s) : 1337
Localisation : Québec
J'ai une application qui utilise une méthode (dynamic_cast) pour connaître le type des données d’un vecteur. Je ne trouve pas cette méthode très élégante, mais je ne vois pas vraiment le moyen de faire autrement.

Pour résumer, une méthode doit faire l'opération A ou B selon le type de objet. L'opération A et B ne concerne en rien les objets, on ne peut donc pas implémenter virtual objet.opération A.opération et B.opération comme solution.

Voici un example de ce que je veux illustrer :
Code :
// compiler avec /GR visual studio .NET 2003
#include <iostream>
#include <vector>

using namespace std;

class Objet
{
public:
   virtual ~Objet()
   {
   }
};

class Cube : public Objet
{
};

class Triangle : public Objet
{
};

void CubeTriangle(int& cube, int& triangle, vector<Objet*>& vecObjet)
{
   cube = 0;
   triangle = 0;
   for (unsigned int index = 0; index < vecObjet.size(); ++index)
   {
      if (dynamic_cast<Cube*>(vecObjet[index]) != NULL)
      {
         cube++;
      }
      else if (dynamic_cast<Triangle*>(vecObjet[index]) != NULL)
      {
         triangle++;
      }
   }
}

int main()
{
   vector<Objet*> vecObjet;

   vecObjet.push_back(new Triangle());
   vecObjet.push_back(new Triangle());
   vecObjet.push_back(new Cube());
   vecObjet.push_back(new Triangle());
   vecObjet.push_back(new Cube());

   int cube, triangle;
   CubeTriangle(cube, triangle, vecObjet);

   cout << "cube : " << cube << endl;
   cout << "triangle : " << triangle << endl;

   // cleanup
   for (unsigned int index = 0; index < vecObjet.size(); ++index)
   {
      delete vecObjet[index];
   }
}


Dans cette exemple, on veut compter les nombres d'objet de type cube et de type triangle. Vous voyez une autre façon de faire ?


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 02 Fév 2005, 20:39 
Tu pourrais faire çà en utilisant une fonction virtuelle pure dans ta clase Object.


Haut
  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 2 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site