Won*_*abo 6 c++ polymorphism operators
我有两个班,两个全球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);
};
Run Code Online (Sandbox Code Playgroud)
如果我像这样使用它,一切正常,B操作符的版本被调用:
B b;
std::cout << b;
Run Code Online (Sandbox Code Playgroud)
但是如果我使用多态,那么A版本会被调用,尽管动态类型是B:
A* b = new B();
std::cout << *b;
Run Code Online (Sandbox Code Playgroud)
一种解决方案是铸造:
std::cout << static_cast<B&>(*b);
Run Code Online (Sandbox Code Playgroud)
但是有没有更简单或更优雅的解决方案呢?
For*_*veR 10
是.一个输出操作符和virtual print类中的函数.
class A
{
public:
virtual ~A() {}
private:
virtual void print(std::ostream&) {}
friend std::ostream& operator << (std::ostream& os, const A& obj)
{
obj.print(os);
return os;
}
};
class B
{
private:
virtual void print(std::ostream&) {}
};
Run Code Online (Sandbox Code Playgroud)