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 :

Aide compréhension d'un code


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut Aide compréhension d'un code
    Bonjour tout le monde,

    Je débute tout juste en programmation C++, et dans mes exercices, j’ai un code à analyser, mais je ne le comprends pas bien très bien… C’est pour cela que je viens vous demander de l’aide !
    Il s’agit d’un code qui réalise le produit d’une matrice avec un vecteur (??).

    On nous donne la définition des classes :

    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
    #define TAILLE 3
    class Vecteur {
      private:
        double vect[TAILLE];
      public:
         Vecteur(double t[TAILLE]) {
    	for (i = 0; i < TAILLE; i++)
    	    vect[i] = t[i];
         }
    } 
     
    class Matrice {
      private:
        double mat[TAILLE][TAILLE];
      public:
         Matrice(double t[TAILLE][TAILLE]) {
    	int i, j;
    	for (i = 0; i < TAILLE; i++)
    	    for (j = 0; j < TAILLE; j++)
    		 mat[i][j] = t[i][j];
         }
    }
    Déjà, je ne comprends pas pourquoi les constructeurs sont implémentés dans la classe… c’est la première fois que je vois ça… Pourquoi pas dans le fichier .cpp comme d’habitude ?
    C’est une question de rapidité ou de sécurité ? Mais pourquoi alors ?

    Puis dans l’exercice, on nous pose deux questions (je vous mets mes réponses) :

    1) Où déclarer la fonction Vecteur produit(Matrice mat, Vecteur vect) faisant le produit de mat par vect ? Comment faire pour que la fonction accède aux données membres des objets mat et vect ?
    Je pense qu’ici il faut parler des liens d’amitiés ? Il faudrait donc déclarer la fonction produit dans la classe matrice par : friend Vecteur produit(Matrice mat, Vecteur vect); ?


    2)On souhaite implémenter une fonction Vecteur produit(Vecteur vect) dans la classe matrice. Comment faire pour que la fonction puisse accéder aux données membres de l’objet
    vect ?
    De la même manière j’aurai dit de déclarer la fonction produit dans la classe matrice par : friend Vecteur produit(Vecteur vect) ;


    D’après vous est ce que sont les bonnes réponses ? Je dois vous avouer que je n’ai pas très bien compris l’amitié en POO…

    Je vous remercie par avance de votre aide,
    A bientôt.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Déjà, je ne comprends pas pourquoi les constructeurs sont implémentés dans la classe… c’est la première fois que je vois ça… Pourquoi pas dans le fichier .cpp comme d’habitude ?
    C’est une question de rapidité ou de sécurité ? Mais pourquoi alors ?
    Lorsque les fonctions sont assez petites nous avons tendance à les laisser dans le .hpp. C'est surtout une histoire de gain de place et peut être aussi de fainéantise pour ne pas créer le cpp.
    Sinon, il faut savoir que les fonction directement dans le .hpp sont inline (mais je ne pense pas que ce s'applique sur les constructeurs).

    Vos réponses sont justes dans le sens que oui, on peut utiliser l'amitié pour résoudre le problème. Toutefois, je suis assez réticent à l'utilisation du mot clé friend. Donc, je proposerai aussi une solution basée sur des getteur / setteur. Les setteur pouvant même être privé et accessible grâce au mot clé friend (ainsi, on limite l'accès à la classe).

    L'autre solution, c'est de faire une fonction produit() qui retourne le résultat. Ainsi, il n'y a besoin que de getteur et d'un constructeur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Sinon, il faut savoir que les fonction directement dans le .hpp sont inline (mais je ne pense pas que ce s'appliquer sur les constructeurs).
    Si. D'ailleurs, on est souvent tenté de définir le constructeur dans le .hpp quand le corps est vide, et donc de le définir en inline, mais il faut aussi tenir compte de l'initialisation des membres.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    dans le hpp => dans la définition de la classe

    Sinon je mettrais la fonction product(const Matrix&, const Vector&) amie de la classe matrice et j'utiliserais en interne une succesion de produit scalaire entre les transposées des vecteurs lignes et le vecteur.

    Le fonction scalar_product(const Vector&, const Vector&) étant déclaré amie de la classe Vector.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Par défaut
    Je vous remercie grandement pour vos réponses ! Je n’ai pas tout compris (je n’ai pas tout vu encore ^^’ ), mais je vais faire des recherches pour comprendre.

    Encore merci et à bientôt !

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

Discussions similaires

  1. Aide - Compréhension code - $this->{$element->helper}()
    Par omageus dans le forum Zend Framework
    Réponses: 2
    Dernier message: 16/03/2010, 18h09
  2. [ARM7] Aide pour la compréhension d'un code
    Par hack-77 dans le forum Autres architectures
    Réponses: 6
    Dernier message: 25/03/2008, 20h34
  3. [VB.NET] besoin d'aide pour déchiffrer un code
    Par pcdj dans le forum Windows Forms
    Réponses: 10
    Dernier message: 27/06/2006, 11h32
  4. Aide pour comprendre le code
    Par jfreuff dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/01/2006, 17h54
  5. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30

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