簡體   English   中英

訪問指定為private的基類的公共靜態成員

[英]Accessing public static members of a base class specified as private

我正在學習C ++。 docs.microsoft.com/en-us/cpp/cpp/member-access-control-cpp文檔說:

將基類指定為私有時,它僅影響非靜態成員。 公共靜態成員仍可在派生類中訪問。

但是,以下代碼從前一個引用之后的示例略微調整導致錯誤C2247:

'base :: y'無法訪問,因為'Derived1'使用'private'繼承'Base'。

對於這種情況,我將不勝感激。

class Base
{
public:
    int x;             
    static int y;      
};

class Derived1 : private Base
{
};

class Derived2 : public Derived1
{
public:
    int ShowCount();    
};

int Derived2::ShowCount()
{
    int cCount = Base::y;       
    return cCount;
}

該文檔有點誤導。

正確的編譯器行為是Base::y Base::xDerived 不可訪問,如果您使用該表示法嘗試訪問static成員。

但是您可以通過使用另一個范圍解析運算符通過全局命名空間 (從而規避Derived1訪問它:

int Derived2::ShowCount()
{
    int cCount = ::Base::y;       
    return cCount;
}

最后,如果您希望鏈接階段成功,請不要忘記在某處定義 y

改變這個:

Base::y;

對此;

::Base::y;

暫無
暫無

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

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