probleme de cast dynamique avec heritage etc - C++ - Programmation
Marsh Posté le 02-12-2002 à 21:40:13
Deja il sert a quoi le virtual dans
Code :
|
? Tu fais pas de l'héritage multiple ?
Déja, il me semble que si tu veux surcharger l'opérateur << et un ostream, il faut que tu le fasse dans une fonction externe (d'ou ton friend). Qui dit externe à la classe exclue l'utilisation d'une méthode virtual. Or toi tu as besoin d'un comportement "virtual".
La solution est de:
- faire une fonction virtual "Print" dans ta classe de base (que tu réimplémentera dans les classes filles)
- faire une fonction "ostream& operator<<(ostream &o, formule &f)" qui va appeler "f.Print(o);"
Et si tu mets "Print" public, tu peux virer le "friend"
Marsh Posté le 02-12-2002 à 22:31:31
A tient j'avais pas vu qu'on pouvai quoter en c++ c chouette
Sinon des potes de facs m'ont donné la solution, c'est effectivement ce que tu preconise bravo
Ce mangnifique bout de code est compilable.
Il faut que je rajoute maintenant la transformation de A implique
B en non A ou B
Code :
|
Marsh Posté le 02-12-2002 à 22:33:15
kenshiro182 a écrit a écrit : Deja il sert a quoi le virtual dans
|
Effectivement non il sert a rien ici.
Marsh Posté le 03-12-2002 à 03:07:26
Citation :
|
Ça m'étonnerai beaucoup que ça compiles ça.
Il faut impérativement des () pour un constructeur, sinon c'est un type seul illégal.
Marsh Posté le 03-12-2002 à 03:11:10
Musaran a écrit a écrit :
Ça m'étonnerai beaucoup que ça compiles ça. |
je confirme
Marsh Posté le 02-12-2002 à 00:19:28
J'essaye de faire un sujet d'exam, et je me retrouve keblo.
Donc les class vrai,faux et non sont des formules. c ça le sujet j'y peut rien .
le prob ce trouve quand je veux surcharger l'operateur cout << avec les class.
main(){
formule* f=new vrai;
cout << *f;
}
ca ca marche.
par contre je vois pas comment je peux m'en sortir pour faire ça :
main(){
formule* f=new non(new vrai);
cout << *f;}
En effet, lorsque j'appelle l'operator << surchargé pour le non, et bien je doit ensuite relancer sur une formule qui est pointée par le champ non::A , sauf que le compilateur veut utilisé l'operateur surchargé de formule. le prob c'est que ça marche pas
une autre idée aurait été de mettre la fonction operator<< de la class formule en virtual, mais ça marche pas.
En fait il retrouve pas automatiquement le type inferieur.
a mon avis personne va capter
#include<iostream.h>
class formule
{
};
class vrai : public virtual formule
{
public:
vrai;
friend ostream& operator<<(ostream &os,vrai &ob){return os << "vrai" ; };
};
class faux : public virtual formule
{
public:
faux;
friend ostream& operator<<(ostream &os,faux &ob){return os << "faux" ; };
};
class non : public formule
{
formule* A;
public:
non(formule* X):A(X){};
friend ostream& operator<<(ostream &os,non &ob){return os << "non(" << *ob.A <<" )"; };
};
Message édité par karim63 le 02-12-2002 à 00:30:29