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.
A voir également:
- Surcharge d'opérateur en C++
- 0668 quel opérateur ✓ - Forum Opérateurs & Réseaux mobiles
- Opérateur de réseau mobile - Guide
- 0466 quel opérateur - Forum Mobile
- Connaitre l'opérateur d'un portable inconnu ? ✓ - Forum Mobile
- 0758 quel opérateur - Forum Opérateurs & Réseaux mobiles
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..."
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.
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 !
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...
@+
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.
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 ???
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.
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.
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
**
}
{
// 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
**
}