我有抽象类(类"父亲")和儿子类
我想在父亲身上写下运营商<<并在儿子身上实施
这里是代码
#include <iostream>
using namespace std;
class father {
virtual friend ostream& operator<< (ostream & out, father &obj) = 0;
};
class son: public father {
friend ostream& operator<< (ostream & out, son &obj)
{
out << "bla bla";
return out;
}
};
void main()
{
son obj;
cout << obj;
}
我得到3个错误
错误3错误C2852:&#39;运营商&lt;&lt;&#39; :只能在类
中初始化数据成员错误2错误C2575:&#39;运算符&lt;&lt;&#39; :只有成员函数和基础可以是虚拟的
错误1错误C2254:&#39;&lt;&lt;&#39; :友元函数不允许使用纯说明符或抽象覆盖说明符
我能做什么?
答案 0 :(得分:1)
虽然您无法创建运算符virtual
,但您可以将它们调用作为常规虚拟函数,如下所示:
class father {
virtual ostream& format(ostream & out, father &obj) = 0;
friend ostream& operator<< (ostream & out, father &obj) {
return format(out, obj);
}
};
class son: public father {
virtual ostream& format(ostream & out, son &obj) {
out << "bla bla";
return out;
}
};
现在只有一个operator <<
,但father
的每个子类都可以通过覆盖虚拟成员函数format
来提供自己的实现。