Surcharge d'opérateur en C++
jc
-
Dante -
Dante -
je serai vraiment soulagé de trouver de l'aide sur mon foutu exo de C++.
Pour résumer l'exo :
on a une classe Vecteur composée d'un int nbLignes et d'un int tab[MAX].
nbLignes représente la dimension du Vecteur et tab ses coordonnées.
Je dois définir (entre autres) un opérateur [] qui permet d'effectuer les opérations suivantes :
(pour un Vecteur v et un entier x)
v[i]=x
ET
x=v[i]
bon, en clair, moi j'ai réussi à faire l'affectation "x=v[i]" mais pas l'autre.
J'ai définit mon opérateur ainsi :
int Vecteur::operator[] (const int i)
{
return (tab[i]);
}
Cette fonction membre me permet d'affecter un interger à un integer.
Mais je n'arrive pas à effectuer l'affectation v[i]=x.
Dois-je utiliser un pointeur ?
Dois-je surdéfinir l'opérateur = ?
Dois-je surcharger la surdéfinition de l'opérateur ?
Dois-je attendre bêtement la correction ?
Dois-je baisser les bras ?
....
Merci d'avance pour vos solutions.
Pour résumer l'exo :
on a une classe Vecteur composée d'un int nbLignes et d'un int tab[MAX].
nbLignes représente la dimension du Vecteur et tab ses coordonnées.
Je dois définir (entre autres) un opérateur [] qui permet d'effectuer les opérations suivantes :
(pour un Vecteur v et un entier x)
v[i]=x
ET
x=v[i]
bon, en clair, moi j'ai réussi à faire l'affectation "x=v[i]" mais pas l'autre.
J'ai définit mon opérateur ainsi :
int Vecteur::operator[] (const int i)
{
return (tab[i]);
}
Cette fonction membre me permet d'affecter un interger à un integer.
Mais je n'arrive pas à effectuer l'affectation v[i]=x.
Dois-je utiliser un pointeur ?
Dois-je surdéfinir l'opérateur = ?
Dois-je surcharger la surdéfinition de l'opérateur ?
Dois-je attendre bêtement la correction ?
Dois-je baisser les bras ?
....
Merci d'avance pour vos solutions.
8 réponses
-
On va pas te donner la soluce, confer mon crédo ci-dessous...
Cependant, je peux te mettre sur la voie en te disant : "Si tu utilisais les références ?"
Si tu ne vois toujours pas avec ca, ma foi... "Où peut-on trouver un symbole & permettant de traiter des références. A quoi servent-elles ???"
Allez, n'hésite pas à me rappeler si nécessaire :-)
Krizniak
Mon crédo : "Aide-toi, le ciel t'aidera..." -
Salut jc,
euh si dans la fenêtre "rechercher" tu tapes :
[c++] surchage d'operateur,
tu auras un cours complet donné par marvinrouge à bolo.
D'ailleurs bravo marvinrouge et bolo, vous avez parfaitement illustré la vocation de ce site.
A +
Le respect, y'a que ça de vrai!
Entre autres. -
aller je te met sur la piste car c'est pas évident:
il y a 2 formes différentes à la méthode à écrire TOUTES les 2
** Vecteur::operator[] (const int i) **
{
**
}
** Vecteur::operator[] (const int i) **
{
**
}
les ** sont les différences entre les 2 méthodes (ATTENTION des fois y'a rien à la place de **)
courage
si tu rames trop indique le ici !-
je crois que je connais l'une des 2 méthodes (même si je ne l'ai pas encore vue en cours) :
la première est un constructeur de l'objet Vecteur qui prend en paramètre un "const int" pour pouvoir convertir le const int en Vecteur lors de l'égalité.
C'est ça ?
(je rappelle que ce sont des parties de programme que je n'ai pas encore vues).
merci pour votre aide précieuse.
En espérant qu'elle continuera...
@+ -
En tous cas bon courage, j'espère avoir un jour la nécessité de maîtriser ces notions, 'commence à me lasser de VBA.
Euh sinon, marvinrouge, ça te dérange si je copie/colle ton cours?
Parce que ce sera toujours ça de bien expliqué le jour où je mettrais vraiment les mains dans le cambouis. :)
Le respect, y'a que ça de vrai!
Entre autres.
-
-
boulet,boulet,boulet.
Je suis un boulet.
j'ai trouvé la solution : il suffisait de déclarer un "int& operator[](const int)".
Je vous remercie tous pour votre aide.
juste une question : cemment on fait pour supprimer mon sujet ?
Encore merci.
@+, j'espère.
PS: marvinrouge : t'as fait quoi comme étude ? Ecole d'ingénieur en informatique ??? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Ah ben oui, faut pas effacé, moi j'ai une formation d'Analyste Programmeur, et on nous a dit que le but ct d'avoir les bases, eh bien je dirais que ce sont les briques élémentaires, genre les Quarks (bon j'exagère c vrai).
Donc l'autoformation après c très important pour ceux qui sont dans mon cas, et les posts de demande d'aide sont très utiles.
Le respect, y'a que ça de vrai!
Entre autres. -
j'ai bien fait de ne pas supprimer ce message, en effet.
Il va me permettre de vous poser une deuxième question (Bolbo, ta gueule).
J'ai entendu parler, en C++, de l'existence de "variables système" qui renvoient le type d'OS (ou le type de machine?).
Le cadre dans lequel je voudrais les utiliser est le suivant :
J'utilise chez moi WIN98se et VisualC++.
J'utilise à l'iut un TX relié à un serveur ibm sur lequel tourne UNIX (le compilateur utilisé est xlC).
Je voudrais effectuer une compilation conditionnée permettant d'utiliser la commande " system("CLEAR") " sous UNIX et " system("CLR") " sous dos.
Je voudrais donc savoir le nom des "variables système" que je dois mettre après mon " #ifdef ".
(serai-ce _WIN32 et _MAC ??? Dans ce cas, comment les utiliser dans le cas qui m'intéresse ???).
merci d'avances pour vos réponses. -
int& Vecteur::operator[] (const int i) ** // pour v[i]=x
{
// en retournant une référence non constante, la valeur pourra être modifiée
**
}
int Vecteur::operator[] (const int i) const // pour x=v[i]
{
// ici une copie du 'int' présent dans le vecteur est retournée
// la modification est perdue (si elle est autorisée) quand la copie est détruite
**
}