C ++重载运算符<<儿童班

时间:2014-05-07 11:24:27

标签: c++ operator-overloading

我创建了一个类Location,它是类VillageCity的父类。我有vector<Location*>,其中包含村庄和城市。现在,我需要在标准输出中打印此vector的内容。这很简单:

    for (int i = 0; i < locations.size(); i++)
       cout << locations.at(i);

我重载了运算符&lt;&lt;对于课程VillageCityLocation。它被称为重载运算符&lt;&lt;始终从班级Location开始。我需要为VillageCity调用重载运算符(取决于具体实例)。是否有像虚拟方法类似的重载运算符?

我是用C ++编程的新手,我是用Java编程的,所以请帮助我。提前谢谢。

2 个答案:

答案 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;
}