访问在相应类的静态函数中创建的对象的私有成员变量不会导致错误.为什么?

Accessing a private member variable of an object created in static function of corresponding class does not lead to error. why?

本文关键字:变量 成员 为什么 错误 静态函数 对象 创建 访问      更新时间:2023-10-16

当我访问在该类的静态函数中创建的对象的私有成员变量时,我不会出错。请考虑以下代码。

#include <stdio.h>
class fruit{
    private: int a;
    public:
             fruit(){
                 a = 2;
                 b = 3;
             }
             static void set(){
                 fruit f;
                 printf("%d",f.a); // no error; why? (a is still in private)
             }
};
void call(){
   fruit f;
   printf("%d",f.a); // error: a is private; works as I expect
}

我所能理解的是,当在对应类的静态函数中创建一个新对象时,您甚至可以以公共模式访问私有变量?但这不是打破了访问说明符的概念吗?或者我理解有什么不对。没有一本书向我指出这种说法。

这些天来,我一直认为要访问私人数据,需要对象和非静态方法,但在编译了上面的代码后,我错了。看起来你不需要非静态的方法。我甚至试着在codepad.org上编译同样的代码http://codepad.org/H06FyRLL给我的o/p是2。请帮帮我,这个有效吗?有人能推荐一些好的教程来学习这些隐藏的秘密吗?

您可以从该类的所有成员和朋友中访问任何该类型对象的私有成员(而不仅仅是*this)。这包括静态成员函数。

有人能给推荐一些好的教程吗

最终的C++图书指南和列表

因为set是类的静态成员函数。因此,它可以访问类的所有命名空间。

静态函数是类的非成员函数-将其视为类的friend。朋友函数对类的所有成员都具有独占访问权限,对吗?