pour ton second probleme, utilise la notion de visiteurs, je te la fais en 2 milisecondes:
class A
{
virtual fnct (A& toto) =0;
}
et tu voudrais faire un traitement en fonction du type de toto,
le plus simple consiste a faire dans fnct un appel a toto.traitement(); ainsi tu peux réecrire une partie de la fonction fct en fonction du type de parametre.
(tu vois le principe ?)
au sujet du premier probleme,
le bout de code suivant fonctionne:
class A
{
public:
virtual A& operator << (A&) = 0;
};
class B: public A
{
public:
virtual A& operator << (A&);
};
class C: public A
{
public:
virtual A& operator << (A&);
};
A& B::operator<< (A& toto)
{
return toto;
}
A& C::operator<< (A& toto)
{
return toto;
}
int main()
{
B b;
C c;
b<<c;
c<<b;
return 0;
}
Dnas ce que tu raconte, quand tu redefini en mettant B& operator<<... tu definit une nouvelle fonciton, tu n´utilise absolument pas le polymorphisme.
ca m´etonne par contre que "operator<<(t); " fonctionne, tu as redefini << pour les char ?