当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

私有数据一定安全吗?[VC/C++编程]

赞助商链接



  本文“私有数据一定安全吗?[VC/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++编译器没法禁止.).


  以上是“私有数据一定安全吗?[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 私有数据一定安全吗?
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .