当我访问在该类的静态函数中创建的对象的私有成员变量时,我不会收到错误。考虑下面的代码。
#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.请帮助我这是有效的吗?有没有人可以建议一些好的教程来学习这些隐藏的秘密?
答案 0 :(得分:0)
因为set
是您班级的静态成员函数。
因此,它可以访问您班级的所有名称空间。
答案 1 :(得分:0)
您可以从班级的所有成员和朋友中访问该类型的任何对象(不仅仅是*this
)的私有成员。这包括静态成员函数。
任何人都可以建议一些好的教程
答案 2 :(得分:0)
静态函数是类的非成员函数 - 将其视为类的friend
。朋友功能可以独家访问班级的所有成员 - 对吗?