zoukankan      html  css  js  c++  java
  • 对象布局(不通过友元访问私有成员)

    在一个特定的的“访问块”(被访问说明符限定的一组声明),变量在内存中肯定是连续存放的;然而“访问块”本身可以不按声明的顺序在对象中出现。

    访问说明符是结构的一部分,它们并不影响从这个结构创建的对象。程序开始运行之前,所有的访问说明信息都消失了。访问说明信息通常是在编译期间消失的。在程序运行期间,对象变成了一个存储区域,没带任何访问限定信息,因此,如果有人真想破坏这些规则并且直接访问内存中的数据,那么C++并不能阻止他做这样的事。

    下面是在类外部修改类的私有成员的一个测试:

    #include<iostream>
    using namespace std;
    class A
    {
            public:
            int i;
            private:
            int j;
            public:
            A(){i=1;j=2;}
            int return_i() {return i;}
            int return_j() {return j;}
    };
    int main()
    {
            A a;
            cout<<"sizeof(A):"<<sizeof(A)<<endl;
            cout<<"before modify"<<endl;
            cout<<"i="<<a.return_i()<<endl;
            cout<<"j="<<a.return_j()<<endl;
            int *ptr_i=(int*)&a;
            *ptr_i=3;
            *(ptr_i+1)=4;
            cout<<"after modify"<<endl;
            cout<<"i="<<a.return_i()<<endl;
            cout<<"j="<<a.return_j()<<endl;
    
            return 0;
    
    
    }
    

    运行结果:

      

  • 相关阅读:
    JSP页面
    JSP简介
    常量与变量的声明与使用
    AJAX无刷新上传图片
    JSP连接MySql数据库
    运算符与表达式
    世界级的javascript ajax client端UI库 Ext学习笔记 menu组件 和 toolbar组件
    OOD/OOA基本原则
    Java字符编码转换过程说明
    正则表达式系统教程
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/2629951.html
Copyright © 2011-2022 走看看