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 :

Héritage : comment faire la différence entre mes objets enfants


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut Héritage : comment faire la différence entre mes objets enfants
    Bonjour,

    J'ai trouvé un petit exercice, mais je ne sais pas comment faire sur un point.

    J'ai une classe Meuble qui hérite de ElementCuisine. Dans l'énoncé il est écrit qu'on peut ajouter une option à un meuble (une poignée ou un matériau par exemple). Dans le cas d'une poignée, on ajoutera son prix au prix du meuble. Dans le cas d'un matériau, on appliquera une majoration au prix du meuble.
    Donc j'ai fait un classe Option, et une classe Poignee qui hérite de Option. Dans ma classe Meuble, j'ai créer un vector d'Option* et une méthode d'ajout qui va avec.

    Avant d'aller plus loin, je me pose la question suivante : comment, dans ma Classe Meuble, lorsque je vais parcourir mon vector d'Option* pour calculer le prix du meuble, je vais réussir à faire la différence entre une Poignee et un Materiau ?

    Merci d'avance pour les pistes apportées !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Tu n'as pas à faire la différence. Tu dois simplement récupérer leur prix.

  3. #3
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Oui mais on calcule pas de la même facon si c’est l’option est une poignée ou matériau. Par exemple si mon meuble coûte de base 20€. J’ajoute une poignée à 10€, donc le prix du meuble devient 20+10. Si l’option est un materiau, elle va par exemple augmenter le prix du meuble de 10%, donc celui-ci deviendra 20+20*10%.

    On remarque bien que le calcul n’est pas le même selon le type de l’option, non ?

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu peux avoir une seconde fonction qui indique si le prix est une majoration ou une pièce supplémentaire.

    Fais-le à la main, sans code
    Ta liste contient:
    1. une lampe à 15€
    2. un frigo à 100€
    3. un meuble à 30€ en bois (+20%)
    4. un meuble à 20€ avec poignée (+10€)


    la fonction prix() du meuble doit retourner le prix final (le prix de base modifié par l'option).
    L'option doit pouvoir calculer un prix modifié quand on lui donne un prix de base. prix_final(prix)J'imagine que auto meuble::prix() const { return has_option() ? option().prix(prix_base) : prix_base; } devrait faire l'affaire.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est exactement ce pour quoi est fait le mot-clé virtual et l'abstraction (et un autre terme qui m'échappe).
    Tu n'as pas à savoir que ton objet est un matériau ou une poignée, tu as besoin de savoir combien coûte l'option.
    Si tu veux garder une distinction entre eux, l'héritage n'a rien à faire et une collection homogène encore moins.
    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.

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Merci pour vos réponses.
    J'avais réussi avec une fonction dans option :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     virtual const double prix(double prix) const = 0;
    que je dérivais par exemple dans Materiau par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const double prix(double prix) const { prix*_majoration; }
    Ca marchait bien, enfin ça donnait le resultat espéré.
    Seulement je me suis rendu compte après, que si je mettais un meuble comme paramètre de la fonction prix dans Option, je pouvais accéder au prix du meuble justement.
    Ainsi ma fonction devient comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual const double prix(const Meuble m) const = 0;
    Et dans Materiau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const double prix(const Meuble m) const { return m.getPrix()*_majoration; }
    Dans meuble pour calculer le prix final je fais ceci :
    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
     
    const double Meuble::prixFinal() const
    {
    	double somme = 0;// 
    	if (_lesOptions.size() >= 1)
    	{
    		for (int i(0); i < _lesOptions.size(); i++)
    		{
    			somme += _lesOptions[i]->prix(this);
    		}
    	}
    	else
    	{
    		somme = _prix;
    	}
    	return somme;
    }
    Seulement maintenant j'ai un nombre incalculable d'erreurs, je ne vois pas ce que je fais de mal pourtant ?

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pourquoi donner le meuble en argument, si tu ne veux que le prix?

    Si tu as plusieurs options, ma solution est mauvaise.
    Tu as des options s'ajoutant au prix, et d'autres qui le multiplient.
    Il te faut deux listes, sous peine d'avoir des erreurs.
    Ainsi, "un meuble, avec une poignée, fait en bois" couterait (10 + 10) * 1,2
    ce qui est différent d'"un meuble, fait en bois, avec une poignée" 10 * 1,2 + 10
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Je veux mettre un meuble en paramètres car une autre option dans le sujet est "Pieds", et le prix de cette option dépend de la taille du meuble. Ainsi, si je le mets en paramètres, je peux accéder à sa taille, à son prix ...

    Du coup c'est 2 listes de quoi qu'il faut que je fasse ?

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Il faut séparer les surcoût multiplicatifs (exprimé en ratio) des prix additifs (exprimés en unité monétaire).

    Tes matériaux ne sont pas des options comme les autres, car elle multiplie les prix.
    D'ailleurs, ils pourraient aussi s'appliquer aux autres options (une poignée en cuivre ou en or?).

    Un meuble ne peut avoir qu'un seul matériau comme option, et ils doivent logiquement toujours en avoir un (le matérieau de base, facteur 1).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Si je fais 3 vector pour mes 3 options, je ne peux plus avoir d'héritage du coup ? Parce que vector<Poignee> il ne me l'acceptera pas par exemple ?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    L'approche de @St-42-FCM-57 n'est pas forcement mauvaise.
    Elle implique un couplage fort entre les classes Meuble/Option/Materiau, ce qui n'est pas très bon pour la réutilisabilité, mais Rome ne c'est pas faite en un jour.
    Attention à l'ordre des calculs de prix, car le mélange de multiplication et d'adition brise la commutativité des calculs.

    Montres-nous ton code et les messages d'erreurs.

  12. #12
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Maintenant j'ai plus de 100 erreurs, ça va être difficile de les lister...
    Je vous montre les parties de code qui entre en compte dans mon soucis.

    Option.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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    class Option
    {
    private:
    	string _nomOption;
     
    public:
     
    	Option(string _nom);
    	~Option();
    	friend ostream & operator << (ostream &, const Option &);
     
    	virtual const double prix(const Meuble m) const = 0;
    	virtual const double getPrix() const = 0;
     
     
    	inline virtual void affiche(ostream &s) const;
    };
     
    void Option::affiche(ostream &s) const {
    	s << "Option : [ nomOption = " << _nomOption << "]" << endl;
    }
     
    inline ostream & operator << (ostream &s, const Option &op)
    {
    	op.affiche(s);
    	return s;
    }

    Materiau.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
    20
    21
    22
    23
    24
     
     
    class Materiau:public Option
    {
    private:
    	double _majoration;
    public:
    	Materiau(string _nom, double maj);
    	~Materiau();
    	const double getPrix() const { return _majoration; }
    	const double prix(const Meuble m) const 
    	{ 
    		return m.getPrix()*(_majoration);
    	}
     
    	inline void affiche(ostream &s) const;
    };
     
    void Materiau::affiche(ostream &s) const
    {
    	s << "Option Materiau: [";
    	Option::affiche(s);
    	s << " Prix = " << this->getPrix() << " Euros ]" << endl;
    }
    Méthode dans Meuble.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
     
     
    const double Meuble::prixFinal() const
    {
    	double somme = 0;
    	if (_lesOptions.size() >= 1)
    	{
    		for (int i(0); i < _lesOptions.size(); i++)
    		{
    			//somme += _lesOptions[i]->getPrix();
    			somme += _lesOptions[i]->prix(this);
    		}
    	}
    	else
    	{
    		somme = _prix;
    	}
    	return somme;
    }
    EDIT :

    J'ai remis comme toute à l'heure avec des double, mais rien ne fonctionne, alors que toute à l'heure tout marchait avec des double.
    Le première erreur que j'ai c'est : "Option : classe de base non définie" dans materiau.h

  13. #13
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    J'arrive un peu après la bataille mais pourquoi ne pas séparer tes options en deux catégories:
    1- des finitions : elles modifient le prix de base de ton meuble avec un % (20% pour de l'érable, 50% pour un plaquage en or)
    2- des compléments: elle rajoute un prix fixe au prix de base augmenté des % des finitions (10€ pour une poignée simple, 500€ pour une poignée en diamant).
    Tu aurais deux vecteurs d'options.

    Ah en fait ternel a déjà fait une proposition équivalente...

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Maintenant j'ai plus de 100 erreurs, ça va être difficile de les lister...
    On s'en fout du nombre.
    Dés que le compilateur tombe sur une erreur, généralement, il part en sucette car il ne comprend plus rien après.
    Donc seules les premières erreurs sont pertinentes. (plusieurs car une erreur peu engendrer plusieurs messages d'erreur)
    Donc les 5-10 premiers messages d'erreurs seront largement suffisants.

    Votre code montre que vous n'avez pas une vue claire de comment devrait être calculer un prix.
    Il faut commencer par avoir une vue claire de comment devrait être calculer un prix avant de l'implémenter.
    Comme c'est des règles business, on peut pas le faire à votre place.

    la classe "Option" est sensé avoir des classes dérivées, son destructeur doit être virtuel.
    Une méthode "prix" et une méthode "getPrix", c'est clairement un truc à emmerde.
    Il faut des noms EXPLICITES sur leur fonction.
    Le fait de ne pas avoir des noms explicites montre qu'on ne sait pas ce que cela doit faire, résultat, l'implémentation fait un peu nimportnawak.

    Un Matériau n'a pas de prix => Une option n'a pas de prix. Et pour calculer un prix, il faudrait le prix de base du meuble (c'est dans l'objet meuble, OK) mais aussi le prix "actuel" quand les modificateurs se basent pas sur le prix de base mais sur le prix après modifications des options précédentes.
    Option Rouge : +20%
    Option Brillant : +10%
    Mais l'option Rouge + Brillant, c'est quoi ?
    - Prix de base * (20%+20%) ?
    - Prix de base * (20%) *(20%) ?

    Un Matériau n'a pas de prix, mais un facteur modificateur. On dégage de getPrix tout pourri.

    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
     
    classe IMeuble
    {
    public :
    	double prixDeBase;
    }
     
    classe Meuble : public IMeuble
    {
    ...
    }
     
    ...
    {
    ...
    	virtual const double calculPrixFinal(double prixCourant, const IMeuble& meuble) const = 0;
    ...
    }
    ...
    Materiau::calculPrixFinal(double prixCourant, const IMeuble& meuble) const
    {
    	return prixCourant + (meuble.prixDeBase * modificateur);
    }
    ...
    Materiau2::calculPrixFinal(double prixCourant, const IMeuble& meuble) const
    {
    	return (prixCourant * modificateur);
    }
    ...
     
    Poignee::calculPrixFinal(double prixCourant, const IMeuble& meuble) const
    {
    	return prixCourant + _prixUnitaire;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const double Meuble::prixFinal() const
    {
    	double somme = _prix;
    	for (int i(0); i < _lesOptions.size(); i++)
    	{
    		somme = _lesOptions[i]->calculPrixFinal(somme,this);
    	}
    	return somme;
    }
    Pour le message d'erreur, faudrait penser à pas oublier les #include qui vont bien.

  15. #15
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Bonjour,

    Quand on crée une classe avec des fonctions virtuelles, en général, l'idée qu'on a derrière, c'est qu'il existe une portion du code qui connaît la classe de base sans connaître les classes dérivées. Alors, le jour où on crée une nouvelle classe dérivée, on n'a pas besoin de changer cette portion du code.

    Pour l'affichage des options d'un meuble, un héritage peut être intéressant. Par exemple, la vue afficherait les options sous la forme d'un tableau avec une ligne par option. On pourrait avoir une colonne qui contient le nom de l'option, une autre qui contient une image et une autre qui contient une description. La vue appellerait des fonctions virtuelles d'une classe Option, sans en connaître les classes dérivées.

    Par contre, pour le calcul du prix, s'appuyer sur un arbre d'héritage me semble être une mauvaise idée. Par exemple, admettons qu'on ait une nouvelle option "couche de peinture" dont le prix peut bénéficier d'une réduction si l'utilisateur a aussi choisi une option "matériau". Dans un tel cas, si on a essayé de rendre générique le calcul du prix à coup d'héritage, tous les efforts tombent par terre. Du coup, à mon avis, il vaudrait mieux que le code qui calcule le prix soit directement capable de distinguer quelles options sont des poignées, lesquelles sont des matériaux, etc. Le couplage est fort, mais tant pis.

    Du coup, je pense que j'aurais instancié un std::optional ou un conteneur pour chaque type d'option, par exemple un std::optional<OptionPoignee>, un std::optional<OptionMateriau>, etc. Le code qui calcule le prix parcourrait chacun de ces objets.

    En ce qui concerne l'affichage, par contre, je me serais appuyé sur l'héritage. Par exemple, j'aurais créé aussi un std::vector<std::reference_wrapper<const Option>>. Le code qui gère l'affichage parcourrait ce vecteur, sans connaître le type réel des options.

  16. #16
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    J'ai l'impression que l’énoncé de l'exercice tend à pousser vers le design pattern décorateur... Chaque option vient décorer le meuble de base, et en modifier le prix.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Petit problème dans un exercice
    Par med1001 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/01/2015, 10h28
  2. Problème dans un exercice algorithmique
    Par abdou005 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 13/11/2011, 16h03
  3. Problème dans un exercice(recherche)
    Par sassa4 dans le forum Excel
    Réponses: 2
    Dernier message: 22/12/2007, 16h43
  4. [POO] Problème dans un exercice sur l'héritage
    Par FabaCoeur dans le forum C++
    Réponses: 2
    Dernier message: 05/05/2007, 17h09

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