OVH Cloud OVH Cloud

tableau et operator[]

4 réponses
Avatar
dug8C
Voila, j'essai de créer une classe tableau et je bute sur
l'operator[].
Ce que je comprend pas c'est comment écrire l'operator[] pour affecter
une valeur à un élément de mon tableau.

par exemple pour faire:
struct Tab{
...
};

Tab[i] = valeur;

Car il faut bien que je passe à la fonction operator[] une valeur
d'index pour savoir à quel élément je dois affecter, et la valeur à
affecter .. ?

Le problème c'est que operator[] ne prend qu'un seul argument.
Quelqu'un peut m'expliquer comment contourner cette obligation?

4 réponses

Avatar
Fabien LE LEZ
On 16 Nov 2004 08:24:39 -0800, (Dug):

Ce que je comprend pas c'est comment écrire l'operator[] pour affecter
une valeur à un élément de mon tableau.


Il faut que l'opérateur renvoie soit une référence vers la variable à
modifier, soit un proxy.


--
;-)

Avatar
drkm
(Dug) writes:

Le problème c'est que operator[] ne prend qu'un seul argument.
Quelqu'un peut m'expliquer comment contourner cette obligation?


Retourne une référence :

int & MyIntegerArray::operator[]( int i ) {
return myArray[ i ] ;
}

La clef est que l'opérateur d'indexation ne sert qu'à indexer, à
récupérer une valeur au moyen d'une clef. L'affectation à cette
valeur relève de l'opérateur d'affectation (du type stocké dans ton
tableau, celui-ci n'ayant plus rien à voir dans l'histoire) :

~> cat fclcxx.cc
#include <iostream>
#include <ostream>

struct A {
A & operator=( A const & lhs ) {
std::cout << "A::=" << std::endl ;
return * this ;
}
} ;

struct B {
A & operator[]( int index ) {
std::cout << "B::[]" << std::endl ;
return myA ;
}
private:
A myA ;
} ;

int main() {
B b ;
b[ 0 ] = A() ;
}
~> g++ -o fclcxx fclcxx.cc -Wall -ansi -pedantic
~> ./fclcxx
B::[]
A::
Tu peux également retourner un Proxy. Cfr. les archives du groupe
pour de nombreux exemples <URL:http://groups.google.com>.

--drkm

Avatar
jmarc
moi je suis débutant mais je me lance un truc peut etre du genre:

class truc
{
int nbelem;
int * adr;
/*par exemple*/
public:
int & operator[] (int i)
{ return adr[i];}

enfin par exemple

"Dug" a écrit dans le message de news:

Voila, j'essai de créer une classe tableau et je bute sur
l'operator[].
Ce que je comprend pas c'est comment écrire l'operator[] pour affecter
une valeur à un élément de mon tableau.

par exemple pour faire:
struct Tab{
...
};

Tab[i] = valeur;

Car il faut bien que je passe à la fonction operator[] une valeur
d'index pour savoir à quel élément je dois affecter, et la valeur à
affecter .. ?

Le problème c'est que operator[] ne prend qu'un seul argument.
Quelqu'un peut m'expliquer comment contourner cette obligation?


Avatar
dug
drkm wrote in
news::


Retourne une référence :

int & MyIntegerArray::operator[]( int i ) {
return myArray[ i ] ;
}

La clef est que l'opérateur d'indexation ne sert qu'à indexer, à
récupérer une valeur au moyen d'une clef. L'affectation à cette
valeur relève de l'opérateur d'affectation (du type stocké dans ton
tableau, celui-ci n'ayant plus rien à voir dans l'histoire) :


En effet c'était confus dans ma tête, merci pour cette explication claire
:)