为什么我们不能在没有公共成员函数的情况下访问类外部的私有静态成员?

拉胡尔·贾恩(Rahul Jain)

这可能是一个愚蠢的疑问,但是我无法理解为什么当我允许定义它时为什么不能在类外部访问私有静态数据成员。

例如:在以下代码中:

class foo
{
    static int A;
    public:
       int getA{return A;}
};
//This is allowed
int foo:A=0;
int main()
{
   //This gives error
   cout<<foo:A;
}
虚拟软件公司
int foo::A = 0;

为成员变量分配存储空间A,并使用对其进行初始化0(实际上,默认情况下0static是使用初始化的,因此是多余的)。您只能在实现.cpp文件中执行一次此操作。这样,每个人都可以实例化您的类而没有任何链接程序问题。请注意,您无法再次执行此操作,即以后分配foo::A = 42;将无法编译,因此您不会违反任何访问规则。您必须显式分配存储的事实是一种语言规则,我认为这会造成更多混乱(我将让编译器在声明静态时自动分配存储)。

因此,总而言之,被允许定义一个私有成员并不像以后能够访问/修改它那样危险,并且与后者大不相同。一旦成员分配了存储空间,该对象就已经被外界密封。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能在没有强制转换的情况下指向指针,访问结构成员?

如果我们可以使用访问器访问私有数据成员,那么为什么我们不能访问私有方法呢?

为什么我们可以使用指针访问私有数据成员类,而不使用类中的其他成员,朋友功能?

为什么我们不能在没有初始化的情况下用get将val属性覆盖为var?

为什么我们可以重定向“ less”命令的输入,但是却不能在没有任何参数的情况下减少运行?

为什么我不能访问TypeScript私有成员?

嵌套类时为什么不能从内部类访问外部类的私有成员?

什么时候应该使私有成员成为静态成员,以及在我的情况下该如何覆盖

在没有实例化对象的情况下访问非静态成员函数?

为什么 Friend 函数不能访问类的私有成员

为什么我可以在没有 getter 方法的情况下访问私有实例变量?

为什么我不能在 operator<< 中访问 Box 类的私有函数?

为什么我们不能在动态向量的情况下使用方括号?

为什么我们会在没有-的情况下?

为什么嵌套子类访问他们的父类的私有成员,但孙子却不能?

为什么嵌套子类访问他们的父类的私有成员,但孙子却不能?

我们能不能在没有导入声明的情况下写这个?就是想

为什么我不能在没有 : 的情况下使用转置功能?

为什么我不能在类定义中直接初始化私有成员变量

为什么我们不能在所有情况下都只使用可比性?

C++:如何在没有模板参数的情况下访问模板化类的静态成员

为什么我们不能在方法内部声明私有本地内部类?

命名空间:不能在没有对象的情况下调用成员函数

有默认情况下静态的成员函数吗?

为什么我们在内部类中可以有静态的final成员,却不能有静态的方法?

为什么我们不能用私有扩展类方法覆盖基类方法?

为什么我们不能将顶级类定义为私有类?

在公共成员函数内部访问私有成员变量

如何在没有访问类类型的情况下获取类成员