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 :

Initialiser un objet réquérant des paramètres dans une de mes classes


Sujet :

C++

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Initialiser un objet réquérant des paramètres dans une de mes classes
    Bonjour,

    Existe-t-il un moyen d'initialiser un objet réquérant des paramètres dans une de mes classes sans passer par des instanciations dynamiques?
    Voici un exemple pour être plus clair.
    J'ai des objets objGrille et objMaillage3D. Leurs constructeurs sont de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objMaillage3D(std::string fileName);
    objGrille(const objMaillage3D &mailles);
    A chaque objet objMaillage3D doit correspondre un objet objGrille (il s'agit d'un partionnement des mailles de l'objet dans l'espace). Est-il possible d'initaliser une variable private objGrille de mon objet objMaillage3D dans le constructeur de celui-ci sans passer par une instanciation dynamique?

    Plus dans un esprit de conception POO, est-il correct de placer une variable objGrille dans un objet objMaillage3D ou existe-t-il une meilleure solution?
    Je pense par exemple à l'héritage... Ma classe objMaillage3D aura toujours une grille donc pourquoi ne pas la faire hériter de mon objet objGrille...
    Ou pourquoi ne pas instancier mon objet objGrille3D en dehors de la classe objMaillage3D dans le corps de mon programme principale...

    Par avance, merci!
    Cordialement,
    Rodrigue

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Cela dépend de ce que tu souhaites faire !

    Si tu souhaites réutiliser les fonctions membres de la class objGrille3D dans ta class objMaillage3D, avec peut être une surcharge en plus, autant hériter.

    Si c'est juste pour stocker des informations et que tu n'as pas besoin d'avoir toutes les fonctions membres public accessibles depuis l'extérieur, autant mettre une objet objGrille3D en private dans ta class objMaillage3D.

    Ce n'est que mon point de vu.

  3. #3
    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 : 50
    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
    Je ne suis pas certain que c'est ce que tu veux, mais la syntaxe d'initialisation d'une donnée membre est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    objMaillage3D::objMaillage3D(std::string fileName) :
      maGrille(...)
    {
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Ti-R
    Si tu souhaites réutiliser les fonctions membres de la class objGrille3D dans ta class objMaillage3D, avec peut être une surcharge en plus, autant hériter.
    C'est peut-être un peu rapide comme analyse.

    Le principe de base de l'héritage en POO est que pour que B puisse dériver de A, B doit être un A.

    Exemple :

    tu as une classe Félin avec une méthode chasser();
    tu voudrais créer une classe Loup ayant aussi la méthode chasser();
    eh bien malgré cela, Loup ne peut dériver de Félin parce que le loup n'est pas un félin (arf).

    Ca parait concon dit comme ça, mais c'est pourtant un moyen très simple d'éviter des erreurs de conception qui peuvent coûter très cher par la suite.

  5. #5
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Bonjour,

    Donc si je suis ton raisonnement, le fait que mon maillage3D ne soit pas une grille implique que je ne dois pas le dériver de l'objet grille...
    Pourtant, un maillage n'a qu'une et une seule fois une grille. De plus dans cet objet de grille, je devrais passer mon objet maillage.
    Si je déclare mon objet grille dans ma classe maillage3D, d'une part je pourrais en déclarer plusieurs, ce qui n'est pas génial niveau conception (j'empêche comme ça de faire quelque chose de bête) et je devrais passer le pointeur this de mon objet maillage3D pour initialiser ma grille.. ça me semble mal conçu! Qu'en penses-tu?

  6. #6
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Citation Envoyé par JolyLoic
    Je ne suis pas certain que c'est ce que tu veux, mais la syntaxe d'initialisation d'une donnée membre est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    objMaillage3D::objMaillage3D(std::string fileName) :
      maGrille(...)
    {
    }
    Merci! C'est ce que je voulais... Il est donc impossible de faire ça autre part que dans le constructeur.

  7. #7
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Citation Envoyé par rigobert
    C'est peut-être un peu rapide comme analyse.

    Le principe de base de l'héritage en POO est que pour que B puisse dériver de A, B doit être un A.

    Exemple :

    tu as une classe Félin avec une méthode chasser();
    tu voudrais créer une classe Loup ayant aussi la méthode chasser();
    eh bien malgré cela, Loup ne peut dériver de Félin parce que le loup n'est pas un félin (arf).

    Ca parait concon dit comme ça, mais c'est pourtant un moyen très simple d'éviter des erreurs de conception qui peuvent coûter très cher par la suite.
    Oui j'ai fait un raccourci il est vrai . Mais j'ai du mal à concevoir ce que représente son objGrille par rapport à son objet class objMaillage3D

    S’il doit avoir 1 seul objet objGrille dans la scène par objet ?
    Si un objGrille représente des coordonnées de l'objet dans la scène?

    Pour répondre à ta question Rodrigue, il faudrait expliciter le rôle de objGrille, et son rôle en relation avec objMaillage3D.

    Car si on ne sait pas si objGrille est un animal ou un félin, comment dire si le loup peut hériter de la fonction membre chasser(); de l'objGrille

  8. #8
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Existe-t-il un moyen d'initialiser un objet réquérant des paramètres dans une de mes classes sans passer par des instanciations dynamiques?
    Bien entendu.
    Cela se fait avec une "initialization list".

  9. #9
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    En effet, je vais détailler:
    objMaillage3D est un objet contenant entre autres toutes les mailles de mon objet à savoir pour l'instant des facettes triangulaires 3D.
    objGrille quand à lui sert essentiellement à accélérer les calculs (le calcul des intersections en fait), il s'agit d'associer chacune de mes facettes à une cellule/case de ma grille.
    J'ai un seul objet dans mon programme mais celui-ci est composé de plus d'une dizaine de milliers de facettes pour l'instant ...

  10. #10
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si objGrille est juste une classe, avec seulement des fonctions membres sans variables membres, autant le déclarer en private static dans ton objet.

    Si il y a des variables membres, qui sont locale à l'objet, le mettre en private.

    Maitenant qu'on sait que l'objet n'est la que pour accélérer des calculs, cela n'a aucun intérêt de faire de l'héritage.

  11. #11
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Ok! Merci beaucoup
    C'est un de mes défauts (ou qualités, ça dépend): je me pose trop de questions et à la fin après avoir imaginé milles et un scénario, j'en arrive à hésiter un peu sur tout

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

Discussions similaires

  1. Syntaxe des paramètres dans une requête
    Par TiboAppert dans le forum C#
    Réponses: 1
    Dernier message: 29/06/2009, 10h06
  2. Réponses: 2
    Dernier message: 30/10/2008, 16h29
  3. Enregistrer des paramètres dans une macro xla
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/10/2008, 17h29
  4. Passer des paramétres dans une URL
    Par adrix26 dans le forum SharePoint
    Réponses: 3
    Dernier message: 04/06/2008, 16h54
  5. Réponses: 1
    Dernier message: 21/03/2006, 14h29

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