子类的重载运算符C++<<

C++ Overloading operator << for child classes

本文关键字:lt C++ 运算符 重载 子类      更新时间:2023-10-16

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

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

我重载了操作符<<用于Village, CityLocation类。称为重载操作符<<从Location班。我需要为VillageCity调用重载运算符(取决于具体实例)。重载操作符是否有类似的虚方法?

我是c++编程新手,我正在用Java编程,所以请帮助我。

简短回答

不,没有这样的事。您可以使用现有的c++特性来模拟它。

长回答

你可以给Location virtual void Print(ostream& os)添加一个方法,并像这样实现operator<<:

std::ostream& operator<<(ostream& os, const Location& loc) 
{ 
    loc.Print(os); 
    return os; 
}

如果你在你的派生类中重写Print(),你将得到你想要的功能。

由于operator<<不能是成员函数(不改变其语义),您可以提供一个虚拟的print方法并进行双调度。

class Location
{
  virtual void print (ostream&);
}
ostream& operator << (ostream& o, Location& l)
{
  l.print(o); // virtual call
  return o;
}