访问在相应类的静态函数中创建的对象的私有成员变量不会导致错误.为什么?
Accessing a private member variable of an object created in static function of corresponding class does not lead to error. why?
当我访问在该类的静态函数中创建的对象的私有成员变量时,我不会出错。请考虑以下代码。
#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
。朋友函数对类的所有成员都具有独占访问权限,对吗?
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组