begin process at 2012 02 10 16:16:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Surcharge des opérateurs


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Surcharge des opérateurs

jeudi 18 janvier 2007 à 12:08:17 | Surcharge des opérateurs

karamellatti

salut tout le monde,
je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..
voici  le programme source en cpp:
class matrice
{
 private:
 int n,m;
 float *val;
 
 public:
 //constructeur
 matrice(int i,int j);

 //destructeur
 ~matrice();

 //constructeur de recopie
 matrice(const matrice & src);

 // affichage
 void affiche();

 //acces a un element
 float getElement(int i,int j);

 //modifier un element
 void setElement(int i,int j,float v);

 //addition de deux matrices
 matrice operator+(matrice b);
};

// definition du constructeur

matrice::matrice(int i, int j)
{
 n=i;
 m=j;

 //reservation de la place memoire
 
 val = new float[n*m];

 //initialisation a zero

 for(i=0; i<n*m; i++) val[i]=0;
}

/definition du destructeur

matrice::~matrice() { delete [] val; }

//definition du constructeur de recopie

matrice::matrice(const matrice &src)
{
 n=src.n;
 m=src.m;
 
 val = new float[n*m];

 for(int i=0; i<n*m; i++) val[i]=src.val[i];
}
 
//definition de la fonction d affichage
void matrice::affiche()
{
 int i, j;
 for(i=1; i<=n; i++)
 {
  for(j=1; j<=m; j++) cout << val[(j-1)*n+(i-1)] << " ";  
  cout << endl;
  
 }
 cout << endl;
}

//definition de la fonction getElement()
float matrice::getElement(int i,int j)
{
 return(val[(j-1)*n+(i-1)]);
}

//definition de la fonction setElement()
void matrice::setElement(int i,int j,float v)
{
 val[(j-1)*n+(i-1)]=v;
}
int main()
{
 matrice a(3,3);    
matrice b(a);  
 a.setElement(1,1,7);    
 matrice c(3,3);   
 a.affiche();
 b.affiche();
 c=a+b;
 c.affiche();

 a(1,1)=4;   // l operateur "()" realisant la fonction setElement precedente
 a.affiche();


maitenant l'instruction en rouge qui me cree un problem car je voudrais bien trouver une methode pour definir l'operateur () pour qu'il face ce que fait la fonction setElement et en meme temps me réalise l'instruction
:   a(1,1)=4;

Merci d'avance pour votre cooperation et votre aide 
 
                                                                                       cordialement, kim

jeudi 18 janvier 2007 à 12:38:12 | Re : Surcharge des opérateurs

laurent1024

Membre Club
http://c.developpez.com/faq/cpp/?page=surcharge#SURCHARGE_matrix_index

++
jeudi 18 janvier 2007 à 15:46:04 | Re : Surcharge des opérateurs

turnerom

void matrice::operator(int i,int j,float v) { setElement(i,j,v); }
jeudi 18 janvier 2007 à 15:48:33 | Re : Surcharge des opérateurs

yann_lo_san

Salut,
Il me semble que tu devrais faire un delete avant de réallouer dans le constructeur par recopie.
Pour l'operator + il vaudrait mieux passer une réference :
Matrice operator + (const Matrice&);
Je pense aussi que tu devrais surcharger l'operator = (affectation) .
Il serait aussi plus simple d'avoir un tableau de pointeurs sur float :

float** val;
Ce qui te permettrais de surcharger l'operator [] facilement
ex :
float f = uneMatrice[1][2];
uneMatrice[0][0] = unFloat;

Donc ce n'est pas l'operator() mais l'operator[] que tu dois définir pour ta question.

jeudi 18 janvier 2007 à 15:53:30 | Re : Surcharge des opérateurs

turnerom

Oups, désolé, je suis allé un peu vite : si m ton nb de lignes et n ton nb de cols et si i=ligne et j=cols voules float& matrice::operator(int i,int j) { return val[n*i + j]; }
mercredi 24 janvier 2007 à 12:24:19 | Re : Surcharge des opérateurs

karamellatti

Salut tout le monde,
merci yann_lo_san pour tes conseils mais sans faire le delete le compilateur va le lancer par défaut à ce que je pense ..mais je voudrais savoir pourquoi selon toi je devrais passer une reference pour l operateur + ...
 
merci aussi turnerom pour ton aide tu y étais presque ..
en fait je l'ai trouvé avec ton aide c'est bien ca:
float &matrice :: operator() (int i ,int j)
{
         return (val[(j-1)*n+(i-1)]);
}
comme ca je pourrais changer n'importe quel element dans la matrice exp: a(2,1)=3;  et j'ai la matrice en retour .
Merci a tous

mercredi 24 janvier 2007 à 14:57:25 | Re : Surcharge des opérateurs

yann_lo_san

Salut,
pour le constructeur par recopie, tu as raison.
Pour l'operator + c'est simplement parceque tu n'as pas besoin de copier la matrice entière sur la pile

matrice operator+(const matrice& b) const
{
      matricc matRenvoi;
      // fait l'addition de this et b dans matRenvoi
      return matRenvoi;
}

jeudi 25 janvier 2007 à 17:07:02 | Re : Surcharge des opérateurs

karamellatti

Je vois ok yann_lo_san,
et merci
jeudi 25 janvier 2007 à 17:11:17 | Fonction récursive

karamellatti

Salut tout le monde,
j'ai besoin de votre aide pour la résolution de l'equation a*x+b=0 en utilisant la récursivité avec la méthode de Dichotomie.
merci 

                                                                  Cordialement, kim



Cette discussion est classée dans : affiche, int, val, matrice, float


Répondre à ce message

Sujets en rapport avec ce message

fonction et matrice [ par herve_blondel ] bonjour a tous.je suis un debutant en C++ et j'aimerais ecrire un fonction qui prend en argument une matrice et me retourne une matrice(je sais ce que Afficher un float a l'ecran, %f de printf [ par kaervas ] Bonjour, je suis en train de coder la fonction %f de printf, je galere un peu en fait! Pour le %d on utilise des modulos et des puissances decroissant matrice au secour.......!!!! [ par badsha ] Bonjour a tous, j'ai une fonction dsvd qui a en entrée matrice a, dimension m et n et elle retourne w et v int dsvd(float **a, int m, int n, float xilinx [ par mourdad ] salut j'ai un code c++ et j'aimerias le transformer en xilinx quelqu'un peut m'aider???????? je sais pas comment transformer le new :'( voici le code programme qui affiche un triangle [ par laguchori ] Bonjour , J'ai un projet à faire qui consiste à créer une classe ligne et la tracer à partir de deux point et ensuite créer une Class triangle dérivée suppression d'une ligne ou colonne d'une matrice avec C++ [ par saidkoukou ] j'ai écrit un petit programme C++ avec lequel je manipule une matrice.j'ai essayé d'appliquer la suppression d'une ligne et d'une colonne de cette mat classe abstraite et interface (au sens Java pas graphique :d ) en C++ [ par lulafitt ] Bonjour, Comme précisé dans le sujet quand je parle d'interface je ne parle pas d'interface graphique mais bien d'interface comme dans Java. Ceci dit surcharges des operators [ par leroiloup ] salut a tout j'ais un probleme d'implementer les deux operator (operator+, operator*) et comment l'etuliser dans main() #include #include using names taille d'une matrice [ par badsha ] je cherche un programme qui calcule la taille d'une matrice.(sur matlab c simple : size(matrice) est basta). j'ai trouvé un code qui calcule la taill Fonction pour calculer l'intersection de deux cercles [ par Djoi ] salut à tous J'ai fait une fonction qui devrait me renvoyer les coordonnées de l'intersection de deux cercles mais celle-ci ne marche pas. Dites moi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,287 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales