所以我想创建一系列派生自基类的类,每个类实现虚方法std::string toString() const
。我能够为<<<<<基类中的运算符是这样的吗?
class BaseDataType
{
friend std::ostream& operator<<(std::ostream& os, const BaseDataType* obj)
{
os << obj->toString();
return os;
}
.... rest of class
我的问题在于指定obj
的输入类型。目前,我正在每个派生类中实现重载,并指定输入类型。
我可以在基类中指定重载,如果是,如何指定?
答案 0 :(得分:2)
你几乎是对的。一个问题是你不应该将指针用作operator<<
的参数,因为那些运算符通常使用引用:
friend std::ostream& operator<<(std::ostream& os, const BaseDataType& obj)
{
os << obj.toString();
然后你需要做的就是在派生类中提供虚拟toString
方法 - 基类中的operator<<
将调用它们。