給出的樣本代碼:朋友是否看到基類?
class Base {
public:
bool pub;
protected:
bool prot;
};
class Derived : private Base {
friend class MyFriend;
};
class MyFriend {
Derived _derived;
void test() {
// Does standard provide me access to _derived.pub and _derived.prot?
cout << "Am I allowed access to this: " << _derived.pub
<< " and this: " << _derived.prot;
}
};
是否是一個朋友給我的所有訪問,就好像我是在類中的成員函數我會得到到我的朋友嗎?換句話說,我可以得到自從我是朋友以來私下繼承的基類的受保護和公共成員嗎?
看到,因爲你已經去麻煩寫上去的示例代碼,你試過*編譯它*?這種答案會很快暴露在警告/缺乏之中。 – ssube 2012-03-26 19:51:42
@peachykeen:編譯器接受什麼,標準說什麼通常是不同的東西。另外,從理論上講,示例代碼無法捕捉到的細微之處。 – 2012-03-26 20:13:54
@AdrianMcCarthy的確如此。但是,許多編譯器會在使用非標準功能時發出警告,如果違反標準和編譯器的實現,您將得到一個簡短而甜蜜的答案。雖然不是萬無一失,但嘗試並不會傷害。 – ssube 2012-03-27 13:43:06