子类的重载运算符C++<<
C++ Overloading operator << for child classes
我创建了一个类Location
,它是类Village
和City
的父类。我有一个vector<Location*>
,它包含村庄和城市。现在,我需要将vector
的内容打印到标准输出。这很简单:
for (int i = 0; i < locations.size(); i++)
cout << locations.at(i);
我重载了操作符<<用于Village
, City
和Location
类。称为重载操作符<<从Location
班。我需要为Village
和City
调用重载运算符(取决于具体实例)。重载操作符是否有类似的虚方法?
我是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;
}
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 没有匹配的“运营商&lt;&lt;”