【发布时间】:2013-02-14 18:58:38
【问题描述】:
我正在实现printing pattern for a class hierarchy,如C++ FAQ 中所述。在FAQ中,打印函数在基类中声明如下:
protected:
virtual void printOn(std::ostream& o) const = 0; // pure virtual
// -- or --
virtual void printOn(std::ostream& o) const; // plain virtual
我正在考虑实现printOn 方法的纯虚拟版本,但有一些变化。我想将返回类型从void 更改为std::ostream&,如下所示:
protected:
virtual std::ostream& printOn(std::ostream& o) const;
我认为这种方法的优点是允许使用链接方法更轻松地将基类的输出合并到派生类的输出中。这是一个例子:
std::ostream& DerivedClass::printOn(std::ostream& stream) const
{
return stream
<< "<DerivedClass>" << '\n'
<< BaseClass::printOn(stream)
<< "<member_one>" << member_one_ << "</member_one>" << '\n'
<< "<member_two>" << member_two_ << "</member_two>" << '\n'
<< "</DerivedClass>" << std::endl;
}
相比之下,如果虚拟BaseClass::printOn 方法被声明为void,则下面是DerivedClass::printOn 的外观,如常见问题解答中所示:
void DerivedClass::printOn(std::ostream& stream) const
{
stream << "<DerivedClass>" << '\n';
BaseClass::printOn(stream);
stream
<< "<member_one>" << member_one_ << "</member_one>" << '\n'
<< "<member_two>" << member_two_ << "</member_two>" << '\n'
<< "</DerivedClass>" << std::endl;
}
问题:有没有人发现我对printOn返回类型的修改有任何缺陷?
【问题讨论】:
标签: c++ printing iostream hierarchy