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..
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Horst Kraemer
On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" wrote:
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
On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" <no@spam.com> wrote:
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,
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
Alexandre
bonjour,
"Mike" a écrit dans le message de news:cb21e7$1456$
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.
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 ...
bonjour,
"Mike" <no@spam.com> a écrit dans le message de
news:cb21e7$1456$1@biggoron.nerim.net...
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.
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...
"Mike" a écrit dans le message de news:cb21e7$1456$
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.
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 ...
Mike
"Alexandre" a écrit dans le message de news:40d5d774$0$7705$ | > 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 :) 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..
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message de
news:40d5d774$0$7705$626a14ce@news.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 :) 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..
"Alexandre" a écrit dans le message de news:40d5d774$0$7705$ | > 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 :) 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..
Fabien LE LEZ
On Sun, 20 Jun 2004 20:42:32 +0200, "Mike" :
| > 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
On Sun, 20 Jun 2004 20:42:32 +0200, "Mike" <no@spam.com>:
| > 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 "+=" ...
| > 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
Fabien LE LEZ
On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" :
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
On Sat, 19 Jun 2004 20:42:19 +0200, "Mike" <no@spam.com>:
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.
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
Mike
Pour résumer l'énoncé :
Soit l'interface Set ( dans l'énoncé elle est template mais je raccourcis l'écriture ) :
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 :)
Pour résumer l'énoncé :
Soit l'interface Set ( dans l'énoncé elle est template mais je raccourcis
l'écriture ) :
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 :)
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 :)
kanze
"Mike" wrote in message news:<cb4lqj$26vj$...
"Alexandre" a écrit dans le message de news:40d5d774$0$7705$ | > 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 :)
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.
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.
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
"Mike" <no@spam.com> wrote in message
news:<cb4lqj$26vj$1@biggoron.nerim.net>...
"Alexandre" <alex.g@netcourrier.com> a écrit dans le message de
news:40d5d774$0$7705$626a14ce@news.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 :)
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.
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.
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
"Alexandre" a écrit dans le message de news:40d5d774$0$7705$ | > 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 :)
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.
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.
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
kanze
"Mike" wrote in message news:<cb4u60$2ao7$...
Pour résumer l'énoncé :
Soit l'interface Set ( dans l'énoncé elle est template mais je raccourcis l'écriture ) :
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.
É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 :
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.
É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 :
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.
É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 :