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 :

class Matrice C++


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut class Matrice C++
    Bonjour, je débute un peu en C++ et je cherche a crée ma class Matrice.
    J'ai un doute sur l'operator () et constructeur de copie...
    Merci de me dire si c'est juste svp

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #ifndef Matrice
    #define Matrice
     
    #include <iostream>
     
    using namespace std;
     
    class Matrice {
        public:
        Matrice(unsigned n = 0,unsigned m = 0):lig(n),col(m), data(new double[n*m]) {} ;
    	Matrice(const Matrice & M){
    	    lig=M.lig;
    	    col=M.col;
    	    data=new double[lig*col];
    	    for(int i=0;i<n*m;i++){
    	        data[i]=M.data[i];
    	        }
    	        };
        ~Matrice(){delete[] data;};
        double operator()(unsigned lig,unsigned col) const;
    	double& operator()(unsigned lig,unsigned col);
     
        private:
        unsigned lig,col;
        double *data;
    };
     
    double Matrice::operator()(unsigned lig,unsigned col) const{
        return data[lig*col];
    };
     
    double Matrice::operator()(unsigned lig,unsigned col){
        return data[lig*col];
    };
     
     
     
    #endif

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Points : 1 685
    Points
    1 685
    Par défaut
    Bonsoir,

    tu as oublié une référence pour l'une des surcharges de ().

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Tu peux utiliser les listes d'initalisations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Matrice(const Matrice & M)
    :lig(M.lig),col(M.col), data(new double[M.lig*M.col]) 
    {
       std::copy(M.data, M.data +  lig*col,data);
    }
    Il manque l'opérateur d'affectation sinon le code suivant plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {
    Matrice M(10,10);
       {
          Matrice M2;
          M2 = M;
       }// destruction de M2.data == M.data
    }// destruction de M.data déjà détruit => boum

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Tu devrais poser le problème sur papier, évidemment ton opérateur () ne fera pas ce que tu veux il devrait plutôt être comme ça :
    - pour une matrice column-major :
    {
    return data[lig + this->lig * col];
    }
    - pour une matrice row-major :
    {
    return data[col + this->col * lig];
    }

    Liste d'initialisations pour ton deuxième constructeur comme l'a dit 3DArchi.

    Et part pitié indente mieux ton code et ajoute un préfixe pour différencier les variables locales des données membres, ton code est déjà moche alors qu'il est tout petit ! Ajoute des sauts de lignes et des commentaires (surtout si tu veux que l'on comprenne vite ton code) et met des noms plus indicatifs, dans ton opérateur () on ne comprend pas la différence entre lig la variable locale et lig la donnée membre alors que l'on devrait rien qu'avec leur nom. Par exemple en donnée membre m_NbLigne et ton paramètre numLigne, ainsi on fait la différence entre le nombre de lignes et un numéro de ligne et entre une donnée membre et une variable locale

Discussions similaires

  1. recherche class Matrice
    Par ZaaN dans le forum C#
    Réponses: 3
    Dernier message: 31/01/2008, 11h56
  2. Creation d'une classe Matrice
    Par parisjohn dans le forum Général Python
    Réponses: 1
    Dernier message: 20/07/2007, 17h46
  3. Réponses: 3
    Dernier message: 06/05/2007, 19h46
  4. Réponses: 15
    Dernier message: 21/01/2007, 22h47
  5. aide classe matrice
    Par ba10 dans le forum C++
    Réponses: 8
    Dernier message: 17/05/2006, 08h10

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