begin process at 2012 05 28 22:43:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Conteneur en C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Conteneur en C++

vendredi 11 février 2011 à 12:00:04 | Conteneur en C++

HerveYims

Salut,

Je souhaite définir un catalogue modélisé comme un conteneur d’objets d’un type parent en C++.
Ce catalogue contient 3 familles d’appareils : un type téléphone mobile(GSM), un assistant numérique personnel (PDA)et un Smartphone (combinant appareil mobile et assistant personnel).
Certaines des méthodes doivent être communes à tous ces objets, au moins du point de vue de l’interface, et permettre des manipulations génériques au niveau du conteneur.

Pour la réalisation du problème, j’envisage définir une classe mère « Catalogue » ayant des attributs comme : type d’objet, sa marque, son identifiant de modèle, ses caractéristiques et son prix.
Les sous classes « gsm », « «pda » et « smartphones » pourront alors hériter de cette classe mère.
Je voudrais savoir si la sous classe « smartphones » doit hérité de « gsm » et «pda » (vu qu’elles combinent les deux fonctionnalités ?)
Comment peut-on structurer ce catalogue modélisé comme conteneur.

Merci :)
vendredi 11 février 2011 à 14:32:57 | Re : Conteneur en C++

CptPingu

Administrateur CodeS-SourceS
Tu peux tout à fait faire ce que tu as dit. Ça me semble correct.

Néanmoins, attention, dû à l'héritage multiple, ça ne fonctionnera techniquement pas sans virtualité.
En effet, si tu as une méthode ou un attribut dans ta classe mère, elle sera donc doublé puisque tu va en hériter deux fois.
(Pda et Gsm hérite de Device, Smartphone hérite de Pda et Gsm, donc Smartphone hérite deux fois de Device).
Ça va créer des ambiguïtés, puisque le compilateur ne saura pas lequel prendre.

Pour régler cela, il faut lui dire de ne pas doubler les classes mères identiques. Et c'est la qu'intervient un héritage peu connu: l'héritage virtuel.

Voici un exemple (Si tu retires virtual devant l'héritage, tu verras que ça ne compilera plus):
Code C/C++ :
#include <iostream>
#include <list>

class Device
{
public:
  virtual std::string whoami() const = 0;
};

class Pda : virtual public Device
{
public:
  virtual std::string whoami() const
  {
    return "Pda";
  }
};

class Gsm : virtual public Device
{
public:
  virtual std::string whoami() const
  {
    return "Gsm";
  }
};

class Smartphone : virtual public Pda, virtual public Gsm
{
public:
  virtual std::string whoami() const
  {
    return "Smartphone";
  }
};

int main()
{
  typedef std::list<Device*>::const_iterator iter;
  std::list<Device*> tab;

  tab.push_back(new Pda);
  tab.push_back(new Gsm);
  tab.push_back(new Smartphone);

  for (iter it = tab.begin(); it != tab.end(); ++it)
    std::cout << (*it)->whoami() << std::endl;

  for (iter it = tab.begin(); it != tab.end(); ++it)
    delete *it;

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
vendredi 11 février 2011 à 22:03:07 | Re : Conteneur en C++

pop70

Bonne idée l'héritage virtuel, par contre il me semble qu'il a juste le "2ème niveau" qui hérite virtuellement.

Je m'explique :

Code :
  
       ClasseA
      /       \
 ClasseB     ClasseC
      \       /
       ClasseD


ClasseB et ClasseC héritent virtuellement, donc
Code C/C++ :
class ClasseB : virtual public ClasseA
{
//...


pareil pour ClasseC,

mais ClasseD a un héritage multiple normal :

Code C/C++ :
class ClasseD : public ClasseB, public ClasseC
{
//...


autrement dit j'aurais tendance à remplacer :


Code C/C++ :
class Smartphone : virtual public Pda, virtual public Gsm
{
public:
  virtual std::string whoami() const
  {
    return "Smartphone";
  }
};


par

Code C/C++ :
class Smartphone : public Pda, public Gsm
{
public:
  virtual std::string whoami() const
  {
    return "Smartphone";
  }
};


voilà, sinon pour le reste je suis tout à fait d'accord.



C++dialement

Pop70
samedi 12 février 2011 à 16:14:00 | Re : Conteneur en C++

HerveYims

@ CptPingu et Pop70 merci pour l intervention : ), je pensais être passé à coté de la plaque en terme d héritage multiple.
Actuellement je suis entrain d&#8217;implémenter ce catalogue(Device) en c++ en le modélisant comme un conteneur d objets d&#8217;un type parent correspondant à ces trois familles d&#8217;appareils.
J envisage créer des objets à chaque famille d appareils tout en associant quelques caractéristiques, à ce niveau je ne vois pas très bien comment procéder. J ai tout de même mit en place un fichier.h de la classe "Device" qui se présente comme suit :

Code C/C++ :
#ifndef DEF_DEVICE
#define DEF_DEVICE

class Device
{

    public:

    void characteristicsGSM(int carrierFrequencies, int voiceCodecs, std::string networkStructure, std::string subcriberIdentityModule, std::string phoneLocking, std::string serviceSecurity  );
    void characteristicsPDA(std::string touchScreen, std::string memoryCards, std::string connectivity, std::string synchronization );
    void ascendyDeviceOrderByPrice(int price); //Tri du catalogue par prix croissant
    void searchDeviceByIDmodel(std::string IDmodel); // Recherche d'un appareil dont on connait le modèle


    private:

    std::string objetType;
    std::string mark;
    std::string IDmodel;
    int price;


};

#endif




Merci.


Cette discussion est classée dans : type, conteneur, pda, gsm, catalogue


Répondre à ce message

Sujets en rapport avec ce message

quel conteneur pour une carte d'hexagones (type wargames)? [ par memorial76 ] bonjour,je cherche à faire une carte de type wargames avec des hexagones (bien sûr). La solution que j'envisage est de créer une classe pour l'hexagon Erreur de type LNK 2005 [ par BenGourion73 ] Bonjour, J'ai une solution en développement qui se compose d'une librairie statique et d'un exécutable. La librairie statique compile bien toute seule Un container qui prend plusieurs types d'objet en C++ [ par kanta ] Bonjour à tous,Ma question concerne le c++. Je cherche un container dans lequel je pourrais mettre les objets de type différent. Par exemple dans un v quantifier les pixel d'une image [ par far3ousa ] je travaille sur Qt en C++je voulais transformer une image de type QImage en une matrice dont l'élément(i,j) represente la valeur du pixel(i,j)je vait quantifier une image [ par far3ousa ] j'ai  réussi a transformer mon image de type QImage en une matrice  de type  QRgb je veut mnt multiplier les élément de ma matrice par un reel ,alors envoi sms via GSM [ par steeveness ] Bonjour, J'ai réalisé un site local pour un micro établissement, et je souhaiterais à partir de ce site envoyer des sms via un GSM. Malheureusement, c comment rendre cliquable un resultat afficher sur une fentre principale de type SDI [ par wiwi2019 ] Bonjour, j'essaye de rendre cliquable une zone de texte afficher sur ma fenêtre principale de mon application de type SDI dans le but envoi de données sous tableur type excel [ par Nakinneuil ] Bonjour, Je suis sous linux et je dois envoyer des mesures (environ 10k mesures) dans un tableur type Excel pour afficher un graphe, le tout en C, je Struct avec fonctions [ par Tybrenn ] Je suis débutant en c++. J'essaie de faire un prog. qui permet de maintenir l'inventaire d'un cellier. J'utilise une struct contenant l'info de chaque Pb de syntaxe avec une methode template d'une classe template. [ par gaspos ] Bonjour,voici une classe template dont l'une des méthode a un type template en plus :template struct foo    {    // première methode sans type templa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales