我已经看到了一些带有朋友operator<<
和虚拟“ print
”成员函数的抽象类的示例,其中两个声明都在该protected
部分中。例如:
class Function{
public:
virtual ~Function() {}
virtual double value(const double x) const = 0;
virtual Function* clone() const = 0;
protected:
friend ostream& operator<<(ostream& os, Function& f);
virtual void print(ostream& os) const = 0;
};
ostream& operator<<(ostream& os, Function& f){
f.print(os);
return os;
}
我不明白为什么这是强制性的。有人可以解释吗?
谢谢!