Ho due classi, con due friend oparator<<
s globali.Operatori globali e polimorfismo
class A {
friend std::ostream& operator<<(std::ostream& o, const A &a);
};
class B: public A {
friend std::ostream& operator<<(std::ostream& o, const B &b);
};
se lo uso come questo, tutto funziona bene, la versione B
dell'operatore viene chiamato:
B b;
std::cout << b;
Ma se io uso polymorpism, la versione A
viene chiamato, anche se la dinamica tipo è B
:
A* b = new B();
std::cout << *b;
una soluzione è colata:
std::cout << static_cast<B&>(*b);
ma c'è una soluzione più semplice o più elegante per questo?
E il richiamo di una funzione virtuale in 'operator << (std :: ostream &, A const &)'? – dyp