Il semble que vous souhaitiez vraiment fournir une fonctionnalité de sortie pour une hiérarchie de classes, et si c'est le cas, vous pouvez fournir un friend operator <<
qui appelle une fonction virtual
.
class Parent
{
public:
friend std::ostream& operator<< (std::ostream& os, const Parent& p);
// ... other class stuff
protected:
virtual void printMyself(std::ostream& os) const
{
// do something if you must, or make this a pure virtual
}
};
std::ostream& operator<< (std::ostream& os, const Parent& p)
{
p.printMyself(os);
return os;
}
class Child : public Parent
{
// other class stuff...
protected:
virtual void printMyself(std::ostream os) const
{
// whatever you need to do
}
};
Également détaillé dans la FAQ C++