Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Classe liste chaînée générique [ Archives / Au secours ] (marik7335)

vendredi 7 janvier 2005 à 00:59:36 | Classe liste chaînée générique

marik7335

Membre Club
       Salut à tous,

  Je souhaite gérer un parc de véhicules contenant des motos et des voitures. Pour se faire, j'ai donc implémenter trois classes : une classe ParcVehicule, une classe Voiture et une classe Moto.
  La classe ParcVehicule est une classe générique qui gère les listes chaînées, il s'agit en l’occurrence d'une classe modèle.
  Par contre, mon problème est le suivant :

    Comment déclaré un objet de type ParcVehicule utilisable à la fois pour un objet de type Voiture et un objet de type Moto ?

  En effet, je suis contraint de déclarer deux objets différents pour la classe ParcVehicule de la manière suivante :

    ParcVehicule<Voiture> *ParcVoiture = new ParcVehicule<Voiture>
    ParcVehicule<Moto> *ParcMoto = new ParcVehicule<Moto>

Si vous avez des pistes, ça serait sympa de m'en faire part.

Merci d'avance.

Marik7335

vendredi 7 janvier 2005 à 01:43:27 | Re : Classe liste chaînée générique

vdust

Réponse acceptée !
Salut !

Je pense qu'il te serais utile d'utiliser l'héritage de classe : tu définis une classe de base, en l'occurence ParcVehicule, qui contient toutes les fonctions nécessaires communes aux deux types de véhicules (en l'occurence les listes chaînées, dans lesquelles tu utilises uniquement des pointeurs ParcVehicule*) :

class ParcVehicule
{
//déclarations des membres de la classes.
}


puis, tu définis les classes dérivées selon le schema

class nom_classe_dérivée : class nom_classe_base
{
//fonctions membres
}


ie dans ton cas

class Moto : class ParcVehicule
{
//fonctions membres
}


class Voiture : class ParcVehicule
{
//fonctions membres
}


L'avantage avec les classes dérivées, c'est qu'un pointeurs de la classe de base peut recevoir un pointeur vers n'importe laquelle de ses classes dérivées, en l'occurence,
ParcVehicule* pvehicule;
peut recevoir aussi bien un pointeur de classe Moto que de classe Voiture. Tu peux ainsi utiliser une seule et même liste chaînée pour stoquer tes Motos ou tes Voitures. Pour pouvoir distinguer les motos des voitures, il te suffit de d'ajouter un membre à la classe de base se référant au type, par exemple une entier, qui sera initialisé avec la bonne valeur dans chacun des constructeurs des classes dérivées.

Je pourrais encore en dire tès long sur l'héritage de classes, tant les possibilités qu'il offre sont nombreuses (en vrac, surdéfinition de fonctions ou d'opérateurs, polymorphisme, ou dans ton cas, ajout de nouveaux types de véhicule en limitant la quantité de réécriture du code, etc.)

Je te conseille vivement de lire des docs sur l'héritage de classe (malheureusement, je n'en ai pas à te proposer )

bonne nuit

-- Virtual Dust --


samedi 8 janvier 2005 à 18:36:10 | Re : Classe liste chaînée générique

darkkinj

Salut, je suis tout à fait d'accords avec ce qui à été dit plus haut j'aurais également opté pour la même solution. Par contre pour ce qui concerne les héritages de classes j'ai quelque chose à te proposer, j'avais fait un tout petit tutoriel sur la manière d'implémenter les mécanismes d'héritage en C++ qui se trouve sur cppfrance: http://www.cppfrance.com/code.aspx?id=27917
Si tu veux que je te donne un coup de main pour t'expliquer comment on peut implémenter une solution pour ton problème il ne devrait pas y avoir de soucis.
 Amuse toi bien

darkkinj
http://www.kinj.fr.st

samedi 8 janvier 2005 à 22:59:52 | Re : Classe liste chaînée générique

marik7335

Membre Club
  Je te remerci pour ton aide darkkinj mais je crois avoir trouvé la solution :
J'ai tout simplement creé une classe Vehicule, puis les classes Motos et Voiture qui sont des classes dérivées de la classe Vehicule.
  Je déclare ensuite un objet dynamiquement de type Vehicule de la manière suivante :

Vehicule *Vehi = NULL;

Pour créer une voiture, je fais simplement :

Vehi = new Voiture;

et pour une moto :

Vehi = new Moto;

Puis la méthode ajouter de la classe ParcVehicule s'occupe d'ajouter un véhicule, qui est soit une voiture ou soit une moto, dans ma liste tout simplement en l'implémentant de la manière suivante :

ParcVehicule::Ajouter(Vehicule *Vehi);

Je te remerci encore une fois pour ton aide
darkkinj. Et merci à toi vdust pour m'avoir mis sur la piste. J'avais pas du tout pensé à l'héritage.

Marik7335





Cette discussion est classé dans : type, objet, classe, générique, parcvehicule


Répondre à ce message

Sujets en rapport avec ce message

une classe static [ par Adeon ] bonjour a tous!je suis sur le developpement d'un jeux.certaine classe ne contienne qu'un seul objet comme par exemple la classe Interface, ou encore l Urgent svppp : Utilisation de <list> [ par najla1986 ] j'ai une classe message, qui comme membre a, entre autre, un objet *expediteur.Lorsque je veux envoyer une occurence de cette classe sur ma liste, par Type string amélioré [ par doudounico ] Bonjour Existe-t-il un type de données (une classe) tel que String qui inclut les attributs RTF ? Je souhaite en effet créer dans ma classe un champ vector et objet de classe [ par cppdupdup34 ] voila mon pbclass tutu {...};int main{...vector prout;tutu objet;prout.push_back(objet);et la ...492 C:\Dev-Cpp\include\c++\bits\stl_vector.h instant CObject [ par ifren ] salutj'ai un petit probleme,bon j'ai une classe data qui herite de la classe CObject, jusque la normalj'ai un tel codeData::Data(): // Copie de l'obje supprimer objet de type BITMAP [ par tdeco ] SalutJ'utilise un objet de type BITMAP que je cré à partir d'un buffer et que j'affiche par la suite.Il y a t-il un moyen de supprimer cet objet après Objet COM [ par 0xYg3n3 ] Bonsoir, Voila je ne sais pas si je vais arriver a me faire comprendre. Je me demandais si un objet qui n'a pas initialiser d'interfaces COM peut qu est-ce que l'adresse d'un objet est la meme que les membres ? [ par rick_moins_moins ] Bonjour,je souhaiterais savoir si l'adresse d'une instance de classe est la meme que l'adresse d'une donnee membre de cette classe ? Class derivée , Template ( POURQUOI ES-CE CI DIFFICILE) ??? [ par nawakator ] J'ai déjà posé cette question, mais je la repose car elle est essentiel pour mon projet!J'ai créer un template permettant de géré une liste chainé de determiner le type d'un objet et réutiliser ce type [ par feanor11 ] Soit un objet O, dont on ne connait pas le type. On peut déterminer son type à l'aide de la fonction typeid(), retournant un objet de type type_info.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.