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 :

Polymorphisme en c++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2019
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 21
    Par d�faut Polymorphisme en c++
    Bonjour � tous,

    Dans un programme, j'essaie de mettre en place le polymorphisme mais je suis pas s�r d'avoir tout bien compris.

    En gros, ce programme doit g�rer diff�rents type de Vehicule d'un garage, la classe m�re. Apr�s j'ai des classes filles, voiture, moto, v�lo, etc...

    J'aimerais au d�marrage, charger un fichier de config, qui indique quels v�hicules sont dans le garage et leur prix. Donc par exemple un fichier txt qui contient :
    Voiture:2000
    Velo:100
    Moto:1500

    Je r�cup�re ces infos dans un map et ensuite, j'aimerai � partir de ce map, cr�er les objets contenu dans mon garage. Donc appeler une m�thode CreerVehicule(std::string, int)

    Je ne sais pas si c'est possible et ni comment le faire si c'est le cas ^^

    Une id�e?

    Pour info, j'ai quelques notions en c++, je ne suis pas un expert.

    D'avance, merci.

    Ioro

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Salut,

    oui c'est une id�e, c'est le principe de ce qu'on appelle une factory (ou fabrique en fran�ais).
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2019
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 21
    Par d�faut
    Alors j'ai lu le lien du site mais j'ai pas tout compris comment l'impl�menter.

    Vous pouvez me donner un exemple de factory?

    Merci.

    Ioro

    EDIT : ne pas tenir compte de ce message On reprend du d�but!

  4. #4
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2019
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 25
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 21
    Par d�faut
    Alors voici le main :
    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
    #include "Vehicule.h"
    #include "Garage.h"
     
    int main(int argc, char *argv[])
    {
    	Garage g;
    	std::map<std::string, int> garageConf;
    	garageConf = g.LoadGarage("Config.ini");
     
    	for (std::map<std::string, int>::iterator it = garageConf.begin(); it != garageConf.end(); it++)
    	{
    		// Créer les véhicules en fonction du type soit de it->first
    	}
     
     
    }
    Garage.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #pragma once
     
    #include <string>
    #include <map>
    #include <fstream>
     
    class Garage
    {
    public:
    	Garage();
    	~Garage();
    	std::map<std::string, int> LoadGarage(std::string);
    };
    garage.cpp
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include "Garage.h"
     
    Garage::Garage()
    {
    }
     
     
    Garage::~Garage()
    {
    }
     
    std::map<std::string, int> Garage::LoadGarage(std::string iniFile)
    {
    	std::ifstream setupGarage;
    	setupGarage.open(iniFile, std::ios::in);
    	std::map<std::string, int> garageConf;
     
    	if (setupGarage)
    	{
    		std::string sContent = ("");
     
    		while (getline(setupGarage, sContent))
    		{
    			std::string vehiculeType = ("");
    			std::string price = ("");
    			std::size_t pos = sContent.find(":");
    			vehiculeType = sContent.substr(0, pos);
    			price = sContent.substr(pos + 1);
    			garageConf.insert(std::pair<std::string, int>(vehiculeType, stoi(price)));
    		}
     
    		setupGarage.close();
    	}
    	else
    	{
    		//erreur
    	}
     
    	return garageConf;
    }
    Vehicule.h
    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
    #pragma once
     
    #include <string>
    #include <map>
    #include <fstream>
     
    class Vehicule
    {
    public:
    	Vehicule();
    	~Vehicule();
     
    	virtual void CreateVehicule(std::string, int) const;
     
     
    private:
    	int m_prix;
    	std::string m_modele;
    };
    Vehicule.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "Vehicule.h"
     
     
     
    Vehicule::Vehicule()
    {
    }
     
     
    Vehicule::~Vehicule()
    {
    }
    Et une classe fille de Vehicule, Moto par exemple :
    Moto.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #pragma once
    #include "Vehicule.h"
    class Moto :
    	public Vehicule
    {
    public:
    	Moto();
    	~Moto();
     
    	virtual void CreateVehicule(std::string, int) const;
     
    private:
     
    };
    Moto.cpp :
    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
    #include "Moto.h"
     
    Moto::Moto()
    {
    }
     
     
    Moto::~Moto()
    {
    }
     
    void Moto::CreateVehicule(std::string type, int prix) const
    {
     
    }
    Voil�, les m�thodes sont vides en fait parce que je ne sais pas quoi mettre dedans pour cr�er mes objets.

    Si j'ai bien compris le polymorphisme, je cr�e d'abord mes objets :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Garage g;
    Vehicule v;
    Moto m;
    et ensuite j'applique des m�thodes "polymorphiques".
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    v.CreateVehicule
    m.CreateVehicule
    ...
    Avec par exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void Moto::CreateVehicule(std::string, int)
    {
    std::cout << "Je suis une Moto" std::endl;
    }
    Mais j'aimerai cr�er les objets en fonction de ce qu'il y a dans mon fichier et l� je vois pas trop comment faire.

    J'ai essay� le factory, avec le lien du site, mais comme je disais, j'ai pas bien compris son impl�mentation.

  5. #5
    Mod�rateur

    Avatar de Bktero
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par d�faut
    D�j�, tu pourrais te simplifier la vie en ne d�finissant pas des fonctions membres qui sont vides. A la limite, tu peux utiliser = default. Voir https://en.cppreference.com/w/cpp/la...lt_constructor

    Ensuite, tu peux parcourir bien plus simplement que cela ta map, avec auto ou un range-based for loop (voir https://en.cppreference.com/w/cpp/language/range-for).

    Ensuite, il faut r�fl�chir � ce que tu souhaites faire. Tu peux ne souhaites que chaque classe poss�de une m�thode pour se cr�er, tu cherches � faire une fonction qui sache cr�er plusieurs types. Car comment cr�er les bons objets alors que tu ne les connais pas encore ? Comme cela a �t� dit, il te faut une factory. Par exemple https://www.geeksforgeeks.org/design...actory-method/

    Un code basique (et un peu cracra) ressemblerait � �a :
    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
    22
    23
    24
    25
    26
    #include <iostream>
     
    struct Vehicule {
        virtual void start() = 0;
    };
     
    struct Car : Vehicule {
        void start() override { std::cout << "car started\n"; }
    };
     
    struct Bike : Vehicule {
        void start() override { std::cout << "bike started\n"; }
    };
     
    Vehicule* create(std::string what) {
        if (what == "car") return new Car;
        if (what == "bike") return new Bike;
        return nullptr;
    }
     
    int main() { 	
        auto car = create("car");
        car->start();
        auto bike = create("bike");
        bike->start();
    }

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut, et bienvenue sur le forum.

    La premi�re r�gle � comprendre et � appliquer, lorsque l'on pose une question sur un forum technique comme celui-ci est de nous aider � t'aider.

    Il faut en effet bien comprendre que l'on ne regarde pas ton �cran au dessus de ton �paule, et que l'on sait encore moins facilement imaginer ce qui peut te passer par la t�te, simplement parce que les rares d�tenteurs d'une boule de crystal �prouvent r�guli�rement des probl�mes avec son utilisation

    De plus, il faut comprendre que, si l'on est g�n�ralement plein de bonne volont�, nous �viterons de te donner des solutions "toutes faites", parce que ce serait un bien mauvais service � te rendre. On pr�f�reras mettre en oeuvre le fameux principe du
    Donnes un poisson � quelqu'un, il mangera pendant un jour. Apprends lui � p�cher, et il mangera toute sa vie
    en te donnant les explications qui te manquent pour r�soudre (par toi-m�me) le probl�me auquel tu es confront�.

    Mais, encore une fois, il est important de se rendre compte que l'on n'a aucun moyen de regarder par dessus ton �paule pour voir le code que tu as �crit.

    L'id�al, quand tu viens poser une question technique, est donc de syst�matiquement nous donner un peu de code � partir duquel nous pourrons travailler. Tu auras surement compris que ce code devrait -- dans la mesure du possible -- correspondre autant que faire se peut � la situation dans laquelle tu te trouve au moment de poser ta question.

    Mais, de mani�re g�n�rale, nous nous contenterons de ce que l'on appelle entre nous un "code minimum compilable" (si tant est qu'il te soit possible d'atteindre ce stade) susceptible de reproduire la situation dans laquelle tu te trouve.

    Cela signifie que l'on n'a pas forc�ment besoin de connaitre l'int�gralit� de ton code, mais que l'on doit au moins disposer de l'ensemble des �l�ments qui nous permettront de nous faire une id�e pr�cise du probl�me (et, partant, de la solution plausible � te proposer )

    Par facilit�, nous te demanderons �galement de faire de pr�f�rence un copier / coller de ton code en le pla�ant en les balises [ CODE ] et [ / CODE ] (sans les espaces), qui peuvent �tre ajout�es automatiquement en appuyant sur le bouton en forme de # qui se trouve au dessus de la zone d'�dition de ton message.

    De cette mani�re, le code sera correctement repr�sent�, en respectant l'indentation de ton code d'origine, et en proposant m�me une coloration syntaxique plus qu'utile, et nous serons nous-m�me en mesure de le copier et de le coller de notre cot� pour essayer de le compiler

    Dans le cas qui nous int�resse aujourd'hui, j'aimerais que tu nous pr�sente, ad minima :
    1. la d�finition de ta classe vehicule, ainsi que l'impl�mentation des diff�rentes fonctions dont tu l'a fournie
    2. la d�finition d'une des classes sp�cifique (voiture, v�lo, camion ou autre), ainsi que l'impl�mentation des fonctions qu'elle contient
    3. la d�finition des autres classes (qui n'h�ritent pas de v�hicule, telle que garage ou autre), ainsi que l'impl�mentation des fonctions qu'elles contiennent.

    Cela devrait nous permettre de nous faire une id�e relativement pr�cise de ta situation actuelle, et de nous diriger vers les explications les plus adapt�e

    Merci de ta compr�hension
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. polymorphisme et autre
    Par jbeauport dans le forum C++
    R�ponses: 15
    Dernier message: 29/06/2005, 13h43
  2. [Language] polymorphisme, interface ...
    Par Ikit dans le forum Langage
    R�ponses: 5
    Dernier message: 03/03/2005, 11h39
  3. R�ponses: 15
    Dernier message: 25/01/2005, 16h51
  4. Surcharge et Polymorphisme
    Par Hell dans le forum C++
    R�ponses: 6
    Dernier message: 12/01/2005, 20h50
  5. R�ponses: 2
    Dernier message: 25/07/2004, 23h24

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