Mam dwie klasy, z dwoma globalnymi friend oparator<<
s.Operatory globalne i polimorfizm
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);
};
Jeśli go używać jak to wszystko działa poprawnie, wersja operatora B
pobiera nazywane:
B b;
std::cout << b;
Ale jeśli mogę użyć polimorfizm, wersja A
zostanie wywołany, chociaż dynamiczny typ jest B
:
A* b = new B();
std::cout << *b;
Jednym rozwiązaniem jest odlewanie:
std::cout << static_cast<B&>(*b);
ale czy istnieje jakieś prostsze lub bardziej eleganckie rozwiązanie?
Co powiesz na wywołanie funkcji wirtualnej w 'operator << (std :: ostream &, A const &)'? – dyp