在C ++类中将变量或成员函数声明为私有时,它实际上意味着什么?除了明显的事实,这些只能由成员函数访问,它们在内存上的映射方式与公共函数不同?
答案 0 :(得分:3)
从标准文档 9.2.12 ,
分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便稍后 成员在类对象中具有更高的地址。 未指定具有不同访问控制的非静态数据成员的分配顺序(11)。实现对齐要求可能导致两个相邻成员不 紧接着分配;那么可能需要空间来管理虚拟功能(10.3)和 虚基类(10.1)。
标准规定了内存分配的顺序,但是为public
数据成员分配的内存与private
对应的内存没有太大区别。
答案 1 :(得分:2)
想象一下,他们 只能从成员函数中获取,然后像这样的代码会破坏:
class Foo {
int x; // this is private
public:
int& X() { return x; } // this is public, but returns a reference to a private variable
};
Foo foo;
foo.X() = 42; // look, I can set the value of a private member without being inside a member function
简而言之,如果某种魔法强制要求私有变量只能由成员函数访问,那么在C ++中定义get / setter的最常见方法之一就会中断。这显然不好。
public
和private
可以帮助程序员构建他的代码,仅此而已。它们绝对没有安全性,也没有针对访问“私有”成员的代码的运行时保护。变量仅在源代码中是私有的。在编译的代码中,没有区别。
答案 2 :(得分:1)
class priva
{
int x=10;
public:
int pub;
};
main()
{
priva a;
int *ptr;
ptr=&a.pub;
--ptr;//4 bite be4 there will be private data
cout<<"Private data having value of 10 is "<<endl;
cout<<*ptr;
}
答案 3 :(得分:0)
除了可访问性之外没有区别!
答案 4 :(得分:0)
public
和private
只有在编译代码之后才会出现。它们与运行时或内存管理没有任何关系。