我创建了一个类Location
,它是类Village
和City
的父类。我有vector<Location*>
,其中包含村庄和城市。现在,我需要在标准输出中打印此vector
的内容。这很简单:
for (int i = 0; i < locations.size(); i++)
cout << locations.at(i);
我重载了运算符&lt;&lt;对于课程Village
,City
和Location
。它被称为重载运算符&lt;&lt;始终从班级Location
开始。我需要为Village
和City
调用重载运算符(取决于具体实例)。是否有像虚拟方法类似的重载运算符?
我是用C ++编程的新手,我是用Java编程的,所以请帮助我。提前谢谢。
答案 0 :(得分:5)
简短回答
不,没有这样的事情。您可以使用现有的C ++功能来模拟它。
答案很长
您可以向地理位置virtual void Print(ostream& os)
添加方法并实施operator<<
,如下所示:
std::ostream& operator<<(ostream& os, const Location& loc)
{
loc.Print(os);
return os;
}
如果您在派生类中覆盖Print()
,您将获得所需的功能。
答案 1 :(得分:2)
由于operator<<
不能成为成员函数(不改变其语义),因此您可以提供虚拟print
方法并进行双重调度..
class Location
{
virtual void print (ostream&);
}
ostream& operator << (ostream& o, Location& l)
{
l.print(o); // virtual call
return o;
}