点击这里给我发消息 点击这里给我发消息

计算机二级C++辅导:私有数据一定安全吗

添加时间:2013-12-7
    相关阅读: 程序 C++

    C++的访问说明符(public private protected)提供了对类内部数据的访问限制。我以前一直以为将成员说明为private就可以保证其数据不被外界读取和改写,直到现在发现自己误解了。

    且看这个小例子:

  #include <iostream>
  using namespace std;
  class stru_a
  {
  public:
  stru_a::stru_a();
  private:
  int m_int;
  long m_long;
  };
  stru_a::stru_a()
  {
  m_int = 1865;
  m_long = 9527;
  }
  int main()
  {
  stru_a a;
  stru_a *p = &a;
  //cout << a.m_int << endl; // 此路不通
  cout << "m_int= "<< *( (int *)p ) << endl;    // 1. 用指针读取
  *( (int *)p ) = 8888;                        // 2. 用指针修改
  cout << "m_int= "<< *( (int *)p ) << endl;
  cout << "m_long= "<< *( (long *)((char *)p + sizeof(int)) ) << endl;    // 3.用指针读取
  }
  /**//*
  m_int= 1865
  m_int= 8888
  m_long= 9527
  请按任意键继续. . .
  */

    从最后的运行结果可以看出,虽然m_int和m_long都是类的私有成员,但是仍然可以通过指针访问。

    关于其原因,《C++编程思想》上有一段解释的很精辟,摘抄如下:

    1. 在一个特定的访问块(被访问说明符限定的一组声明)内,成员变量在内存中是连续存放的;

    2. 程序运行之前,所有的访问说明都消失了……在程序运行期间,对象变成了一个存储区域,别无他物(HateMath注:即访问控制符只是在编译时起作用,防止程序员误访问不该访问的内容。如果你执意用别的方式访问某个私有成员,C++编译器没法阻止。)

相关计算机二级C++辅导:私有数据一定安全吗

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册