Code une factory FluxFactory.cpp / FluxFactory.h

Résolu/Fermé
SectorN1 Messages postés 5 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 16 décembre 2015 - 15 déc. 2015 à 10:27
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 16 déc. 2015 à 15:07
Bonjour,

Je besoin de créer et coder une factory FluxFactory qui possède ces différentes caractérisques:
enum STREAMS {FILE = 1, DUMMY}
static FluxStream* getNewInstance(STREAMS enumValue);
// instancie FileStreamImpl ou DummyStreamImpl en fonction d'enumValue

=> Cette methode retourne a chaque fois une nouvelle instance de FileStream ou DummyStream

J'ai bien crée les deux méthodes "FileStream" et "DummyStream" (fichier.cpp et fichier.h), mais je n'ai pas réussi de coder la methode FluxFactory (fichier.cpp et fichier.h)

Merci d'avance

10 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 16/12/2015 à 11:10
"ON TE DEMANDE..." qui "ON" !! (PS : Je travail sur un projet free-lance)

Ta demande ressemble à une demande scolaire. En effet, quand on a le niveau pour penser ce genre de design, on a généralement le niveau pour l'écrire aussi. Ce qui laissait fortement à penser que c'était un design imposé (pour apprentissage), et que l'on te demandait d'en écrire l'implémentation. (PS: Il n'est pas nécessaire de crier en ECRIVANT EN MAJUSCULE).

Je travail sur un projet free-lance

Tu sembles débuter dans la programmation, c'est étonnant qu'on t'ai confié un projet free-lance...

Pour ton souci, il te suffit d'utiliser un sélecteur tel que:
FluxStream* getNewInstance(STREAMS enumValue)
{
  switch (enumValue)
  {
     case FILE: return new FileStreamImpl;
     case DUMMY: return new DummyStreamImpl;
     default: std::cerr << "Unknow enum: " << enumValue << std::endl;
  }
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
1
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
15 déc. 2015 à 11:32
Bonjour.

FileStream et DummyStream ne sont pas des méthodes mais des objets.

On te demande de créer une classe "FluxFactory". Qui possède une méthode statique getNewInstances. En fonction de ce que tu donnes en argument (via un simple switch), tu crées une nouvelle classe FileStreamImpl ou une nouvelle classe DummyStreamImpl. FileStreamImpl et DummyStreamImpl sont toutes les deux des classes héritant de la classe abstraite FluxStream.

À faire:
  • Créer la classe FluxStream
  • Créer la classe FileStreamImpl qui hérite de FluxStream
  • Créer la classe DummyStreamImpl qui hérite de FluxStream
  • Créer la classe FluxFactory
  • Créer la méthode statique getNewInstances, au sein de FluxFactory.
  • Remplir la méthode statique getNewInstances, en utilisant un sélecteur (switch) pour renvoyer la bonne instanciation.

0
SectorN1 Messages postés 5 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 16 décembre 2015
15 déc. 2015 à 13:51
"ON TE DEMANDE..." qui "ON" !! (PS : Je travail sur un projet free-lance)
J'ai crée FluxStream, FileStreamImpl, DummyStreamImpl mais je n'arrive pas a coder FluxFactory puisqu'il faut utiliser un enum
0
SectorN1 Messages postés 5 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 16 décembre 2015
Modifié par cptpingu le 16/12/2015 à 11:10
Salut,

Merci pour ton aide.
J'ai quelques erreurs de compilation mais je n'arrive pas a comprendre pourquoi !

FluxFactory.cpp:3:28: error: ‘STREAMS’ was not declared in this scope
./FluxFactory.cpp:4:1: error: expected ‘,’ or ‘;’ before ‘{’ token
/ error: ‘getInstance’ is not a member of ‘FluxFactory’


Par contre dans mon fichier FluxFactory.h, j'ai déclaré "STREAMS"

    class                   FluxFactory : public FluxStream
    {
        public:
            enum STREAMS {FILE = 1, DUMMY};
            static FluxStream* getNewInstance();
        public:
            FluxFactory();
            ~FluxFactory();
    };
#endif


et pour la 2ème erreur, j'ai pas trouvé le "," ou ";" !

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 16/12/2015 à 11:52
Si tu ne me mets pas le fichier FluxFactory.cpp où tu as des erreurs, ça va être difficile de voir ce qui ne va pas :(.
Par intuition, je dirais que tu n'inclus pas FluxFactory.hh dans FluxFactory.cpp, et pour le ";", impossible de te dire ce qui ne va pas sans "voir".

PS: Merci de bien mettre les balises de code quand tu postes un code-source. Je te les ai ajoutés sur ton message.


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
SectorN1 Messages postés 5 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 16 décembre 2015
16 déc. 2015 à 11:49
Merci bien :)
Voila mon fichier FluxFaclory.cpp
#include "FluxFactory.h"

FluxStream* getNewInstance(STREAMS enumValue)
{
  switch (enumValue)
  {
     case FILE:
            return new FileStreamImpl;
     case DUMMY:
            return new DummyStreamImpl;
  }
}

et ça mon fichier .h


#ifndef FLUX_FACTORY_H
#define FLUX_FACTORY_H

#include "FluxStream.h"
#include <fstream>

class FluxFactory : public FluxStream
{
public:
enum STREAMS {FILE = 1, DUMMY};
static FluxStream* getNewInstance();
public:
FluxFactory();
~FluxFactory();
};
#endif
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
16 déc. 2015 à 11:56
  • La signature de getNewInstance n'est pas la même dans le header et le fichier de code.
  • STREAMS n'existe pas dans le fichier de code, car STREAMS est défini *dans* la classe. Donc deux solutions possibles: soit tu déclares STREAMS en dehors de la classe, soit tu précises FluxFactory::STREAMS au lieu de STREAMS dans ton fichier de code.

0
Alors, on galère avec sa baignoire C++ ?

Ce n'est pas du tout un projet free-lance, c'est un exercice donné en 1ere année de master à l'ETNA.

Demander de l'aide c'est bien, mentir c'est mal.
0
SectorN1 Messages postés 5 Date d'inscription lundi 14 décembre 2015 Statut Membre Dernière intervention 16 décembre 2015
Modifié par cptpingu le 16/12/2015 à 14:59
Demander de l'aide c'est bien, mentir c'est mal.


Un peu de respect STP !!
Envoyer ta phrase a la personne qui m'a demandé de faire le projet :/
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 16/12/2015 à 19:36
Je ferme ce sujet avant qu'il dégénère.

@2leuz: Ne t'inquiète pas, j'avais déjà remarqué depuis longtemps que c'était un devoir étudiant (cf post #3), et qu'il n'était pas free-lance :p. Tu ne fais que me le confirmer.

@TicTak ou @SectorN1: Si tu as des difficultés, demande à tes professeurs en priorité. Le forum ne doit être utilisé qu'en dernier recours, pour des problèmes vraiment "pointus". Là, c'est juste du cours/de la syntaxe que tu ne maîtrises pas. Une petite relecture de tes cours aurait sans doute suffit.
De plus, il est clair que tu as menti, et c'est bien dommage. Ça n'inspire ni confiance, ni respect. D'autant plus qu'il n'y a pas de mal à être étudiant...


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous