簡體   English   中英

在C ++中,訪問說明符不能控制靜態成員的可見性嗎?

[英]In C++, do access specifiers not control visibility of static members?

來自http://www.learncpp.com/cpp-tutorial/812-static-member-functions/的代碼示例:

class Something
{
private:
    static int s_nValue;
};

int Something::s_nValue = 1;

此代碼編譯時沒有警告或錯誤。 我不理解為什么。

我們不應該在嘗試訪問s_nValue收到警告,因為它是私有的嗎? 或者這些訪問說明符不適用於靜態成員?

s_nValue的定義不是從類外部“訪問”成員 - 它實際上是它的實現。 可以認為這就像成員函數的實際實現一樣,如果放在封閉類聲明之外的源文件中。

換句話說,訪問說明符絕對同樣適用於靜態成員。

這是類的private靜態成員的定義 ,因此是允許的。 因為類的靜態成員的定義必須在類之外,無論是private還是public

簡而言之,它不是訪問成員,而是定義它,就像在類外定義 private函數一樣。

另請注意:不要在Assignment和Contructors之間混淆。 這條線:

int Something::s_nValue = 1;

不是“賦值”一個值,它是構造對象。 一般來說:

ClassA Something::s_nValue(...parameters...);

C ++允許Contructors的“賦值”樣式語法。 例:

class A
{
public: 
    A(int i) { m_i = i; }

    int getI() { return m_i; }

private:
    int m_i;
};

class B
{
public: 
    static int getAI() { return a.getI(); }
private:
    static A a;
};

A B::a = 2;

暫無
暫無

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

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