C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

surcharge de fonctions virtuelles pures

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Mike
Guest





PostPosted: Sat Jun 19, 2004 6:42 pm    Post subject: surcharge de fonctions virtuelles pures Reply with quote



Bonjour,

Dans un énoncé de TP, on me demande de faire la chose suivante :
Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
prototype à la class A ( qui est virtuelle pure et dont dérive B ).

Le prototype donné :
B& operator +(B&);

Ce que j'ai tenté de faire :

class A
{
A& operator + (A&) = 0;
};

class B : A
{
B& operator + (B&) { // implementation ... }
};

Bien évidemment, il y a des erreurs de compilation car le compilateur
considère B toujours comme virtuelle.

Est-ce une erreur dans l'énoncé ou bien ai-je raté un épisode ? Merci de
m'éclairer un peu..



Back to top
Horst Kraemer
Guest





PostPosted: Sun Jun 20, 2004 8:22 am    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote



On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" <no (AT) spam (DOT) com> wrote:

Quote:
Dans un énoncé de TP, on me demande de faire la chose suivante :
Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
prototype à la class A ( qui est virtuelle pure et dont dérive B ).

Le prototype donné :
B& operator +(B&);

Ce que j'ai tenté de faire :

class A
{
A& operator + (A&) = 0;
};

class B : A
{
B& operator + (B&) { // implementation ... }
};

Bien évidemment, il y a des erreurs de compilation car le compilateur
considère B toujours comme virtuelle.

Est-ce une erreur dans l'énoncé ou bien ai-je raté un épisode ? Merci de
m'éclairer un peu..

L'énonce dit qu'il faut ajouter le prototype *donné* à A. Donc

class B;
class A
{
virtual B& operator+(B&)=0;
};

class B:public A
{
B& operator+(B&) { return *new B;}
};

Bien entendu tout cela n'a pas de sens parce que un opérateur+ ne
renvoie jamais une réference mais plutot un objet,

--
Horst


Back to top
Alexandre
Guest





PostPosted: Sun Jun 20, 2004 6:29 pm    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote



bonjour,

"Mike" <no (AT) spam (DOT) com> a écrit dans le message de
news:cb21e7$1456$1 (AT) biggoron (DOT) nerim.net...
Quote:
Bonjour,

Dans un énoncé de TP, on me demande de faire la chose suivante :
Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
prototype à la class A ( qui est virtuelle pure et dont dérive B ).

est-ce l'énoncé exact du TP ? Parce que ça n'a pas bcp d'interet.

Quote:

Le prototype donné :
B& operator +(B&);

Là encore c'est stupide de renvoyer une référence... A quel objet va-t-elle
faire référence ? La sémantique d'un opérateur + doit créer une nouvelle
variable, donc...

De plus c'est un peu bête de mettre dans une classe A une fonction utilisant
des B (qui dérive de A). Normalement, A n'a pas à savoir ce qu'est un B...
Ce serait plutot l'inverse...

Donne l'énoncé exact du TP, pour voir ...



Back to top
Mike
Guest





PostPosted: Sun Jun 20, 2004 6:42 pm    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote


"Alexandre" <alex.g (AT) netcourrier (DOT) com> a écrit dans le message de
news:40d5d774$0$7705$626a14ce (AT) news (DOT) free.fr...
Quote:
Dans un énoncé de TP, on me demande de faire la chose suivante :
Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
prototype à la class A ( qui est virtuelle pure et dont dérive B ).

est-ce l'énoncé exact du TP ? Parce que ça n'a pas bcp d'interet.

C'est l'énoncé exact. Je ne peux le donner vu qu'il est en allemand Smile mais
cela me semblait ésotérique aussi de retourner une référence sur des
opérateurs +, *, -.

Enfin je voulais juste savoir si c'était normal que je trouve ce prof
incompétent. Avec ton message, j'ai un début de réponse..



Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Jun 20, 2004 6:52 pm    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote

On Sun, 20 Jun 2004 20:42:32 +0200, "Mike" <no (AT) spam (DOT) com>:

Quote:
| > Dans un énoncé de TP, on me demande de faire la chose suivante :
| > Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
| > prototype à la class A ( qui est virtuelle pure et dont dérive B ).
|
| est-ce l'énoncé exact du TP ? Parce que ça n'a pas bcp d'interet.

C'est l'énoncé exact.

AMHA, il y a une faute de frappe -- j'espère pour le prof en question
qu'il voulait écrire "=" ou "+=" ...


--
schtroumpf schtroumpf

Back to top
Fabien LE LEZ
Guest





PostPosted: Sun Jun 20, 2004 6:58 pm    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote

On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" <no (AT) spam (DOT) com>:

Quote:
Dans un énoncé de TP, on me demande de faire la chose suivante :
Ajouter la surcharge de l'opérateur + à la classe B en ajoutant son
prototype à la class A ( qui est virtuelle pure et dont dérive B ).

Le prototype donné :
B& operator +(B&);

Le prof proposera-t-il une correction de cet exercice ? Si oui, merci
de (tenter de) la reproduire ici -- j'aimerais connaître le fin mot de
l'histoire.


--
schtroumpf schtroumpf

Back to top
Mike
Guest





PostPosted: Sun Jun 20, 2004 9:05 pm    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote

Pour résumer l'énoncé :

Soit l'interface Set ( dans l'énoncé elle est template mais je raccourcis
l'écriture ) :

class Set
{
virtual iterator insert(int elt) = 0;
virtual int size() = 0;
virtual int count(int elt) = 0;
virtual void erase(int elt) = 0;
virtual iterator begin() = 0;
virtual iterator end() = 0;
virtual iterator find(int elt) = 0;
};

Écrire une classe dérivée de Set et qui implémente l'interface Set par
délégation :

class StandardSet : Set { ... };

Maintenant, rajouter les opérateur +, -, * ( union, différence,
intersection ) à l'interface Set et les implémenter dans votre classe
dérivée :

StandardSet& operator + (StandardSet& ); // prototypes donnés par le
prof
StandardSet& operator - (StandardSet& );
StandardSet& operator * (StandardSet& );

Voilà l'énoncé.

Donc j'en ai déduis que s'il voulait qu'on rajouter ces opérateurs à
l'interface Set, il fallait les rendre virtuels purs dans Set. ( sinon quel
intérêt de préciser qu'il fallait les rajouter à l'interface Set... ).

Enfin, il nous a filé une implantation d'un AVL Tree qu'on doit utiliser
pour implémenter la classe, mais quand je vois le code de l'AVL Tree, je me
suis posé des questions sur sa santé mentale :)





Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 21, 2004 9:13 am    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote

"Mike" <no (AT) spam (DOT) com> wrote

Quote:
"Alexandre" <alex.g (AT) netcourrier (DOT) com> a écrit dans le message de
news:40d5d774$0$7705$626a14ce (AT) news (DOT) free.fr...
| > Dans un énoncé de TP, on me demande de faire la chose suivante :
| > Ajouter la surcharge de l'opérateur + à la classe B en ajoutant
| > son prototype à la class A ( qui est virtuelle pure et dont dérive
| > B ).

| est-ce l'énoncé exact du TP ? Parce que ça n'a pas bcp d'interet.

C'est l'énoncé exact. Je ne peux le donner vu qu'il est en allemand Smile

Donne toujours:-). Ça nous arrive de citer des bouts de texte en
anglais ; je ne sais pas pourquoi on serait plus raciste vis-à-vis des
allemands.

Quote:
mais cela me semblait ésotérique aussi de retourner une référence sur
des opérateurs +, *, -.

En général, comme on a dit, les opérateurs +, -, etc. doivent renvoyer
une valeur, et non une référence. Ce qui fait qu'ils se combine très mal
avec l'héritage -- en admettant que j'ai un:

operator+( Base const& lhs, Base const& rhs )

et que Base est une classe abstraite, quel doit être le type de rétour ?

Si vraiment il faut un polymorphisme avec de tels opérateurs, il faut
passer par l'idiome de lettre/envellope de Coplien.

Quote:
Enfin je voulais juste savoir si c'était normal que je trouve ce prof
incompétent. Avec ton message, j'ai un début de réponse..

Ou bien, il est incompétent, ou bien, il cherche à vous faire découvrir
vous même pourquoi c'est une mauvaise idée de melanger l'héritage et les
opérateurs arithmétique.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 21, 2004 9:26 am    Post subject: Re: surcharge de fonctions virtuelles pures Reply with quote

"Mike" <no (AT) spam (DOT) com> wrote


Quote:
Pour résumer l'énoncé :

Soit l'interface Set ( dans l'énoncé elle est template mais je raccourcis
l'écriture ) :

class Set
{
virtual iterator insert(int elt) = 0;
virtual int size() = 0;
virtual int count(int elt) = 0;
virtual void erase(int elt) = 0;
virtual iterator begin() = 0;
virtual iterator end() = 0;
virtual iterator find(int elt) = 0;
};

Tu es sûr que tu as bien tout copié ? Parce que s'il n'y a pas de
destructeur virtuel là dedans, le prof est réelement incompétent. Au
point d'être dangéreux.

S'il n'a pas déclaré size() et count() const, c'est inquiètant aussi.

Quote:
Écrire une classe dérivée de Set et qui implémente l'interface Set par
délégation :

class StandardSet : Set { ... };

Maintenant, rajouter les opérateur +, -, * ( union, différence,
intersection ) à l'interface Set et les implémenter dans votre classe
dérivée :

StandardSet& operator + (StandardSet& ); // prototypes donnés par le
prof
StandardSet& operator - (StandardSet& );
StandardSet& operator * (StandardSet& );

Voilà l'énoncé.

C'est prèsque l'idiome de lettre/envellope. Avec juste assez de
différences pour que ça ne peut pas marcher:-).

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.