| View previous topic :: View next topic |
| Author |
Message |
Dug Guest
|
Posted: Tue Nov 16, 2004 4:24 pm Post subject: tableau et operator[] |
|
|
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?
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Tue Nov 16, 2004 5:03 pm Post subject: Re: tableau et operator[] |
|
|
On 16 Nov 2004 08:24:39 -0800, [email]dug8C (AT) hotmail (DOT) com[/email] (Dug):
| Quote: | 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.
--
;-)
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Tue Nov 16, 2004 7:32 pm Post subject: Re: tableau et operator[] |
|
|
[email]dug8C (AT) hotmail (DOT) com[/email] (Dug) writes:
| Quote: | 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
|
|
| Back to top |
|
 |
jmarc Guest
|
Posted: Tue Nov 16, 2004 9:42 pm Post subject: Re: tableau et operator[] |
|
|
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 (AT) hotmail (DOT) com> a écrit dans le message de news:
[email]1999b9d8.0411160824.50cf8e41 (AT) posting (DOT) google.com[/email]...
| Quote: | 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?
|
|
|
| Back to top |
|
 |
dug Guest
|
Posted: Tue Nov 16, 2004 10:01 pm Post subject: Re: tableau et operator[] |
|
|
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> wrote in
news:wkoehxd1xw.fsf (AT) fgeorges (DOT) org:
| Quote: | 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
:)
|
|
| Back to top |
|
 |
|