2つのクラスがあり、2つのグローバルfriend oparator<<
があります。グローバル演算子と多相
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);
};
私はこのようにそれを使用する場合は、すべてが正常に動作している、オペレータのB
バージョンが呼び出されます:
B b;
std::cout << b;
しかし、私はポリモーフィズムを使用している場合、A
バージョンはダイナミックものの、呼び出されますタイプはB
です:
A* b = new B();
std::cout << *b;
一つの解決策は、鋳造されています
std::cout << static_cast<B&>(*b);
しかし、これにはさらに簡単で洗練されたソリューションがありますか?
'operator <<(std :: ostream&、A const&)'で仮想関数を呼び出すのはどうですか? – dyp