[英]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::x
在Derived
都不可訪問,如果您使用該表示法嘗試訪問static
成員。
但是您可以通過使用另一個范圍解析運算符通過全局命名空間 (從而規避Derived1
) 來訪問它:
int Derived2::ShowCount()
{
int cCount = ::Base::y;
return cCount;
}
最后,如果您希望鏈接階段成功,請不要忘記在某處定義 y
。
改變這個:
Base::y;
對此;
::Base::y;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.