我已經看到幾個抽象類的例子,其中有一個朋友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;
}
我不明白爲什麼這是強制性的。有人可以解釋嗎?
謝謝!
爲什麼*什麼*是強制性的? – juanchopanza
請學會正確書寫**聲明......您沒有注意到[您的上一個問題](http://stackoverflow.com/questions/17907019/friend-declaration-in-protected-section)是否被編輯過? (鏈接:http://stackoverflow.com/posts/17907019/revisions)閱讀「decleration」讓我很難過:'( –
好吧,我自己修復它...現在仍然有'operator <<'的參數'Function&f '應該是'const Function&f'(兩次),因爲打印'f'不應該修改它,但我不想觸摸代碼(實際上我剛剛注意到我添加了一個缺少';'後類的定義) –