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

时间:2014-10-31 16:43:24

标签: c++

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

#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.请帮助我这是有效的吗?有没有人可以建议一些好的教程来学习这些隐藏的秘密?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  

任何人都可以建议一些好的教程

The Definitive C++ Book Guide and List

答案 2 :(得分:0)

静态函数是类的非成员函数 - 将其视为类的friend。朋友功能可以独家访问班级的所有成员 - 对吗?