繁体   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