Accueil > Forum > > > > Conteneur en C++
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
|
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’implémenter ce catalogue(Device) en c++ en le modélisant comme un conteneur d objets d’un type parent correspondant à ces trois familles d’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
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|