surcharge de l'opérateur [][]

surcharge de l'opérateur [][] - C++ - Programmation

Marsh Posté le 06-02-2008 à 01:53:47    

Apres avoir codé une multiplication matricielle (algorithme de strassen), je recommence en c++ et cherche à implémenter l'opérateur [][] (tableau à 2 dimansions)
Or, lorsque je déclare l'opérateur comme suit :

Code :
  1. erreur: declaration of «operator[]" as non-function


Donc je ne sais pas bien comment implémenter cet opérateur. J'ai implémenté l'opératuer [] simple, qui renvoie un pointeur sur un entier

Code :
  1. int *operator [] (const int ) const;


 
Mais cela ne me suffit pas, je souhaite acceder a un tableau en deux dimensions (à moins que quelque chose de GROS ne m'échappe, ce dont j'ai un peu le sentiment).
Svp, mes cours de c++ sont un peu lointains et mes recherches google infructueuses (suppression automatique des caracteres [ meme avec les doubles quotes..."
 
Merci !


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 06-02-2008 à 01:53:47   

Reply

Marsh Posté le 06-02-2008 à 07:23:47    

salut !
 
j'avoue ne pas bien comprendre ton problème. Ou pourquoi ta deuxième méthode avec l'opérateur [] retournant un pointeur ne te conviens pas...
 
Il est a noter que l'opérateur [][] en lui-même n'existe pas. Si tu veux implémenter quelque chose qui s'y apparente il faut passer par l'utilisation de classe proxy. L'idée c'est que tu implémente un opérateur [] qui retourne une autre classe (par exemple Ligne). Et pour cette classe tu réinplémente l'opérateur [].  
Ainsi quand tu fera inst[2][4], inst[2] retournera la 3e instance de Ligne et sur cette instance s'appliquera l'opérateur[4]
j'espère avoir été clair :d
 
Mais toujours est-il va te renseigner du côté des classe proxy. Je pense que tu y trouvera ton bonheur

Reply

Marsh Posté le 06-02-2008 à 09:12:47    

un proxy ouais , même si la solution avec l'opérateur qui renvoit T* estr en général suffisante.
 
Sinon tu surcharge operator() avec 2 paramétres et voila

Reply

Marsh Posté le 06-02-2008 à 14:58:16    

Ah merci, c'est déjà pas mal plus clair... Comme j'ai vraiment pas le temps, je vais implémenter cela avec une fonction get(i,j), ca marche aussi bien et puis ca ira plus vite à mettre en place !
 
Ce fut éducatif, merci beaucoup  :jap:


---------------
Un blog qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed