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 :

instanciation à la volée


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut instanciation à la volée
    Bonjour,
    Je dois coder un script de simulation d'un reseau metabolique.
    Les données necessaires à l'initialisation de mes objets[
    -quantité de substrat dans chaque noeud et nom (class noeud)
    -reaction entre les noeuds (class reaction)
    -reaction entre noeuds de type feedback (class feedback:public noeud)
    ]se trouvent dans un fichier.
    Etant donné qu'une instanciation sous une boucle de lecture detruit mes objets au fur et à mesure qu'ils sont crées, comment puis-je les "sauvegardés"??


    Merci d'avance

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Si j'ai bien compris, de l'allocation dynamique suffirait.
    Plus simplement tu pourrais utiliser std::vector déclaré hors de la boucle, et push_back :

    http://c.developpez.com/faq/cpp/?page=STL#STL_vector

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Utilise un conteneur.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut
    C'est une solution dejà envisagée mais le souci, c'est que je dois instancier des noeuds(ma premiere classe) et des reactions et que ces dernières (les reactions) contiennent les adresses des noeuds (2 ou 3 noeuds) qu'elles utilisent???
    La nouvelle question est donc:
    -Comment representer la structure du reseau avec un simple conteneur?

    PS:
    mon programme fonctionne tres bien lorsque l'instanciation est faite en "dur" sous le main. noeuds)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut
    DE plus, l'ordre des reactions (donc de lancement des methodes de la class reaction) est potentielment important.

  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,

    C'est, justement, le but des conteneurs...

    Le tout, c'est de créer une classe qui fonctionne correctement...

    On peut en effet considérer (mais reprend moi si je me trompes ) que si un noeud donné est en relation avec un autre noeud donné, la réaction sera toujours identique...

    On peut donc en déduire que, SI chaque noeud n'était en relation qu'avec un seul autre noeud, on pourrait lui donner comme membre une paire du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::pair<relation,noeud>
    Mais, comme un noeud peut etre en relation avec plusieurs autres noeuds, il nous faut juste un conteneur permettant d'avoir plusieurs paires relation/noeud...

    Les types de contenurs utiles sont nombreux, mais on peut etre particulièrement attiré par les listes et par les vecteurs (la pile ou la file pourrait d'ailleurs mieux convenir dans certains cas )

    D'un autre coté, on se trouve confronté au fait que la classe relation doit connaitre la classe noeud et que la classe noeud doit connaitre la classe relation... Qu'à cela ne tienne, la "pré déclaration" vient à notre secours.

    Voici donc un code de ce que j'entre-apprecois
    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
     
    class relation; //la déclaration réelle suit, mais on en a besoin pour noeud
    class noeud
    {
        std::list<std::pair<relation,noeud> > Items;
        //les autres membres prives
        public:
            //tout ce qui va bien en public (constructeur/destructeurs/foncteurs)
    };
    class relation
    {
        noeud *Depart; //permet de retomber sur le noeud de départ
        noeud *Arrivee;//permet de retomber sur le noeud d'arrivee
        //!!!ATTENTION!!! il ne faut pas faire de delete sur ces deux noeuds ;)
        //les autres membre de la classe relation
        public:
            //tout ce qui va bien en public (constructeur/destructeurs/foncteurs)
    };
    class feedback:public noeud
    {
    //contenu de la classe feedback
    };
    Chaque fois que tu rajoute un noeud à un autre, tu crées la relation "qui va bien" entre ces deux noeuds, tu crées une paire avec le noeud à rajouter et la relation que tu vient de créer, et tu rajoute cette paire dans la liste (ce peut etre, selon les cas, un vecteur, une pile ou une file )

    Tu sera en mesure de créer, finalement un arbre Naire de tous tes noeuds
    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

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut
    C'est extremement troublant car le code fourni ressemble preque trait pour trait au mien( excepté la classe noeud).

    Je pense que c'est une bonne base de travail pour construire une classe noeud améliorée, et ainsi recupèré mes neouds et mes liens.
    merci beaucoup

  8. #8
    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
    Citation Envoyé par samisam
    C'est extremement troublant car le code fourni ressemble preque trait pour trait au mien( excepté la classe noeud).

    Je pense que c'est une bonne base de travail pour construire une classe noeud améliorée, et ainsi recupèré mes neouds et mes liens.
    merci beaucoup
    Héhé...

    Tu sais, quand une conception se base sur des prérequis identiques, il y a de fortes chances pour que son résultat soit relativement identique quelque soit le concepteur (du moins, tant qu'il s'agit de concevoir les classes )

    Ceci dit, c'était, justement, ta classe noeud qui semblait te perturber le plus...

    Comme je ne veux t'obliger à rien, si tu nous fournis ton code d'origine pour cette classe ainsi que le problème auquel tu es confronté, on peut envisager de t'aider dans la poursuite de ton idée propre...

    Si, par contre, tu estimes que mon idée vaut la peine d'etre approfondie (apres tout, je n'ai pas, loin de là, la science infuse ) et/ou si tu as besoin de précision concernant le début de code que j'ai fournis, n'héiste pas à demander
    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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut
    Je te remercie de ton aide et je prend bonne note de ta proposition.

    Voici donc les classes principales et un .cpp permettant de tester mes classes.
    Fichiers attachés Fichiers attachés

  10. #10
    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
    D'apres tes fichiers, il y a certaines incohérences entre ce que tu nous présente à la base, et ce que tu code...

    Dans ton premier message, tu indique de feedback doit avoir un héritage public ave noeud, alors que tu lui crées un héritage public avec... reaction... Cherchez l'erreur

    Sans avoir l'implémentation des méthodes de tes différentes classes, il est difficile de se faire une idée précise, mais...

    -Dans ta classe noeud, tu prévois une chaine de caractère pour le nom du noeud, mais tu ne prévois aucune possiblité (ni dans le constructeur, ni en tant que méthode)... de définir ce nom (qui, selon toute vraissemblance, est destiné à etre défini une bonne fois pour toutes...)

    Par contre, tu fournis une méthode qui permet de récupérer cette chaine...non initialisée

    -Est tu sur qu'il soit intéressant de déclarer _model en tant que variable statique, alors que, visiblement, tout part de ta classe feedback??, et que,visiblement, il n'est destiné qu'à une chose: déterminer comment tu dois gérer les reactions doivent etre gérées (mais ne ferait pas, a priori, partie meme de la classe reaction...)

    -Selon ton héritage, feedback se retrouve avec trois pointeurs de type noeud, dont deux ne sont pas directement accessibles à feedback..., mais... il me semblait que tu avais besoin de pouvoir en gérer plus de trois...et que chaque noeud devait pouvoir, lui meme, disposer d'enfants...Rassure-moi, tu ne comtpe pas utiliser moduleur pour créer ton arbre? Ai-je si mal compris les choses que cela???
    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

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 9
    Par défaut suite et fin
    effectivement il y avait des incohérence mais elle ont été résolu.
    Le problème de l'instanciation à la volée a été résolu en utilisant
    la classe map.J'utilise en index le nom du noeud et la valeur à cette index est l'adresse de ce noeud, que je peut alors passer en paramètre au constructeur de la classe reaction et/ou feedback.

    Feedback utilise effectivement 2 noeuds qui ne sont pas directements accessibles puisqu'ils sont construit dans reaction. Après tout, feedback n'est qu'une spécialisation de reaction.

    voilà, merci pour ton aide. si cela t'interresse, je t'enverrai l'archive de mon projet pour que tu puisses juger mon travail. En tout cas ton avis m'interresse.

    merci encore pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instanciation d'Interface à la volée
    Par ElTchoupi dans le forum C#
    Réponses: 19
    Dernier message: 11/03/2010, 17h57
  2. instanciation des web services à la volée
    Par newdevso dans le forum Services Web
    Réponses: 24
    Dernier message: 21/08/2009, 15h27
  3. [FLASH MX 2004] Texte dynamique à la volée
    Par falcon dans le forum Flash
    Réponses: 2
    Dernier message: 27/05/2004, 22h00
  4. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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