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?
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.
-- ;-)
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) :
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
dug8C@hotmail.com (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) :
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>.
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) :
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
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?
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" <dug8C@hotmail.com> a écrit dans le message de news:
1999b9d8.0411160824.50cf8e41@posting.google.com...
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?
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?
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 :)
drkm <usenet.fclcxx@fgeorges.org> wrote in
news:wkoehxd1xw.fsf@fgeorges.org:
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
:)
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 :)