Rechercher : dans
Par :

Surcharge d'opérateur en C++

Dernière réponse le 3 aoû 2007 à 14:14:03 jc, le 10 fév 2003 à 10:18:49 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « surcharge d'opérateur en C++ » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Langage C++ - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Java: les opérateurs VoirQu'est-ce qu'un opérateur? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, ... On distingue plusieurs types d'opérateurs : les opérateurs de calcul les...

1

Krizniak, le 10 fév 2003 à 12:02:04

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..."

Répondre à Krizniak

2

Cqqn, le 10 fév 2003 à 12:54:44

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.

Répondre à Cqqn

3

marvinrouge, le 10 fév 2003 à 13:02:28

Bravo aussi à CCM d'exister qui nous permet de nous entre-aider via le Net !

Répondre à marvinrouge

4

marvinrouge, le 10 fév 2003 à 13:05:03

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 !

Répondre à marvinrouge

5

jc, le 10 fév 2003 à 13:53:27

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...
@+

Répondre à jc

6

Cqqn, le 10 fév 2003 à 15:20:12

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.

Répondre à Cqqn

7

marvinrouge, le 10 fév 2003 à 15:44:34

Tu fais ce que tu veux (copier/coller/sniffer de la colle, etc ...) avec mon cours

plus sérieusement: si je le mets à dispo de tous ici c'est pour que ça serve (tout de suite) ou plus tard (tu le sauves sur ta machine)

si tu veux abandonner VB, passes à Java !

@+

et bon courage

Répondre à marvinrouge

8

jc, le 11 fév 2003 à 11:52:05

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 ???

Répondre à jc

9

marvinrouge, le 11 fév 2003 à 12:48:28

N'effaces pas ton sujet: meme si la réponse te semble simple maintenant. d'autres personnes peuvent avoir le même problême et rrouver la réponse ici.

j'ai fait un IUP maths/info à Dauphine (ou j'ai appris plein de trucs cools en info ...)
puis un Dess Ingénierie d'Aide à la Décision

marvinrouge

Répondre à marvinrouge

10

BOLBO, le 11 fév 2003 à 22:11:40

Alor JC, on ecoute po les correction en cour? ;)

Répondre à BOLBO

11

Cqqn, le 12 fév 2003 à 10:10:56

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.

Répondre à Cqqn

12

jc, le 13 fév 2003 à 01:50:42

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.

Répondre à jc

13

 Dante, le 3 aoû 2007 à 14:14:03

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
**
}

Répondre à Dante