Code une factory FluxFactory.cpp / FluxFactory.h [Résolu/Fermé]

SectorN1 5 Messages postés lundi 14 décembre 2015Date d'inscription 16 décembre 2015 Dernière intervention - 15 déc. 2015 à 10:27 - Dernière réponse : cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention
- 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
Afficher la suite 

10 réponses

cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention - Modifié par cptpingu le 16/12/2015 à 11:10
+1
Utile
"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
Cette réponse vous a-t-elle aidé ?  
cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention - 15 déc. 2015 à 11:32
0
Utile
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.

SectorN1 5 Messages postés lundi 14 décembre 2015Date d'inscription 16 décembre 2015 Dernière intervention - 15 déc. 2015 à 13:51
0
Utile
"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
SectorN1 5 Messages postés lundi 14 décembre 2015Date d'inscription 16 décembre 2015 Dernière intervention - Modifié par cptpingu le 16/12/2015 à 11:10
0
Utile
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
cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention - Modifié par cptpingu le 16/12/2015 à 11:52
0
Utile
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
SectorN1 5 Messages postés lundi 14 décembre 2015Date d'inscription 16 décembre 2015 Dernière intervention - 16 déc. 2015 à 11:49
0
Utile
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
cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention - 16 déc. 2015 à 11:56
0
Utile
  • 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
Utile
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.
SectorN1 5 Messages postés lundi 14 décembre 2015Date d'inscription 16 décembre 2015 Dernière intervention - Modifié par cptpingu le 16/12/2015 à 14:59
0
Utile
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 :/
cptpingu 3771 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 7 janvier 2018 Dernière intervention - Modifié par cptpingu le 16/12/2015 à 19:36
0
Utile
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.