在李普曼P656我讀:非模板函數朋友
非模板函數或類的朋友可以到類模板:
template<class Type> class Bar {
friend class Foobar;
friend void fcn();
};
我不知道這一切的手段。如果fcn
成爲朋友,那麼是因爲您希望它訪問Bar
的私人成員,但如果沒有任何Bar
對象作爲參數傳入,它如何訪問它們?
有人請賜教我嗎?
在李普曼P656我讀:非模板函數朋友
非模板函數或類的朋友可以到類模板:
template<class Type> class Bar {
friend class Foobar;
friend void fcn();
};
我不知道這一切的手段。如果fcn
成爲朋友,那麼是因爲您希望它訪問Bar
的私人成員,但如果沒有任何Bar
對象作爲參數傳入,它如何訪問它們?
有人請賜教我嗎?
作爲friend
X
意味着朋友(無論是功能還是班級)都可以訪問X
的所有私人和受保護成員。
在您的示例中,類Foobar
和函數fcn
可以訪問Bar
類的私有和受保護成員。
現在的問題是:
怎麼能訪問它們,如果還沒有得到傳遞到作爲參數的酒吧對象?
那麼,它可以訪問,如果它有Bar
的實例。例如。
void fcn()
{
Bar<int> bar;
bar.PrivateFun(); //okay even if PrivateFun is a private function of Bar
bar.PrivateData = 10; //okay even if PrivateData is a private data of Bar
}
只是爲了強調差異,認爲這另一個功能:
void g()
{
Bar<int> bar;
bar.PrivateFun(); //compilation error - g() is not a friend of Bar!
bar.PrivateData = 10; //compilation error - g() is not a friend of Bar!
}
希望它可以幫助你理解這意味着什麼能夠訪問類的私有成員,這意味着什麼是一個friend
一類!
也許有一個全球性的Bar<T>
它可以訪問 - 只是因爲沒有明顯的參數並不意味着它不能訪問Bar<T>
。而且,這是不合格的語法。
語法錯誤在哪裏?另外,您是否收到了關於§D.5的消息? – Potatoswatter 2011-04-05 17:27:45
true - 這是一個錯字。 – RandomCPlusPlus 2011-04-05 17:13:46
因爲我相信你弄清楚了,在我之前的問題中,我的一個錯誤來自於我不清楚上述來自Lippman的陳述 – RandomCPlusPlus 2011-04-05 17:15:14
是的 - 它是有道理的。再次感謝。 – RandomCPlusPlus 2011-04-05 17:20:59