簡體   English   中英

基礎訪問的朋友派生

[英]friend of base accesses derived

我遇到了這個懸而未決的問題,這確實令人困惑。 這種行為應該有意義嗎? 是否在標准中? 這是問題:

class parentFriend;
class parent
{
  friend class parentFriend;
  public: void f1(){};
  protected: void f2(){};
  private: void f3(){};
};
class childpub: public parent {};
class childprot: protected parent {};
class childprv: private parent {};
class parentFriend
{
  public:
  void f()
  {
    /* which of the following statements will compile? why? why not?*/
    parent p; p.f1(); p.f2(); p.f3(); // these will compile 
    childpub cpub; cpub.f1(); cpub.f2(); cpub.f3();
    childprot cprot; cprot.f1(); cprot.f2();
    cprot.f3(); // does not compile 
    childprv cprv;
    cprv.f1(); // does not compile 
    cprv.f2(); // does not compile 
    cprv.f3(); // does not compile 
  }
};

從我的理解讀你發布的鏈接(也看到了同樣的問題, 這里有一些答案),原題的作者是由gcc編譯器(從2009年線程的行為感到驚訝,gcc版本4.0.1中的線程mentionned )正在編譯而沒有錯誤的這一行,但不應包含:

childprot cprot; cprot.f1(); cprot.f2(); // (2)

我在MSVC 2010中嘗試了您的代碼,但此行無法編譯,友誼沒有按標准所預期的那樣繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM