私有数据类型和成员函数

时间:2010-10-01 10:10:49

标签: c++ class

在C ++类中将变量或成员函数声明为私有时,它实际上意味着什么?除了明显的事实,这些只能由成员函数访问,它们在内存上的映射方式与公共函数不同?

5 个答案:

答案 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的最常见方法之一就会中断。这显然不好。

publicprivate可以帮助程序员构建他的代码,仅此而已。它们绝对没有安全性,也没有针对访问“私有”成员的代码的运行时保护。变量仅在源代码中是私有的。在编译的代码中,没有区别。

答案 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)

publicprivate只有在编译代码之后才会出现。它们与运行时或内存管理没有任何关系。