| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 466 人关注过本帖
标题:对 《对象参数与私有变量》有感,大侠看了不要笑话啊~
只看楼主 加入收藏
yyblackyy
Rank: 6Rank: 6
等 级:侠之大者
帖 子:98
专家分:457
注 册:2010-3-31
结帖率:100%
收藏
 问题点数:0 回复次数:0 
对 《对象参数与私有变量》有感,大侠看了不要笑话啊~
//偶是新手,看了帖子之后就回去自己试了试
//也就有了自己的一点认识,所以拿出来分享一下
#include <iostream>
#include <cstdio>
using namespace std;
class A
{
    char a;            //偏移量 0
    short b;         //偏移量 2(1+1)
    int c;            //偏移量 4(2+2)
    double d;        //偏移量 8(4+4)
public:
    void show(){ cout<<"a="<<a<<"  "<<"b="<<b<<"  "<<"c="<<c<<"  "<<"d="<<d<<endl;}
};
int main()
{
    A t;
/*
类(结构体)的大小等于最后一个数据成员的偏移大小加上数据类型大小
假如我们要修改一个类成员的数值,我们可以用其偏移地址来访问(类的首地址加要访问的数据成员的偏移量)
   而偏移量又有四条条规格(网上查的):
   1: 偏移量必须是数据类型的整数倍(0为任何数据类型的整数倍);
   2:  类(结构体)的大小必须是类(结构体)最大数据类型的整数倍;
   3: 第一个数据类型的偏移量等于类(结构体)的首地址;
   4: 若类(结构体)有嵌套,则嵌套中的类(结构体)偏移量必须是嵌套类(结构体)中最大数据类型的整数倍;
   
    讲完了这些也该下菜了*/
char *p1=0;   //为了方便,嘿嘿
short *p2=0;
int *p3=0;
double *p4=0;
p1=(char *)&t+0;        //a 的偏移地址    等于类(结构体)的首地址所以加上0
p2=(short *)&t+1;        //b 的偏移地址 (short 类型为2个字节 指针移一下就2个字节,所以只要加1就行了 )
p3=(int *)&t+1;           // c的偏移地址 (int 为四字节(VC6) 指针移一下就4个字节,所以只要加1就行了)
p4=(double *)&t+1;         // d的偏移地址 (double 为八字节 指针移一下就8个字节,所以只要加1就行了)
//赋值***************************************************************************
printf("%p\n%p\n%p\n%p\n",p1,p2,p3,p4);
*p1='a';
*p2=23;
*p3=45;
*p4=56.7;
//输出
cout<<"a="<<*p1<<"  "<<"b="<<*p2<<"  "<<"c="<<*p3<<"  "<<"d="<<*p4<<endl;//直接调用用的是偏移地址
//*************************************************************************************
t.show ();//用共有的函数调用
return 0;
}
/* 总结:
    找出数据成员的偏移量 求出偏移地址 强制转换到该数据类型的指针
    赋值,访问
*/
搜索更多相关主题的帖子: 笑话 对象 参数 变量 
2010-04-01 09:42
快速回复:对 《对象参数与私有变量》有感,大侠看了不要笑话啊~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017224 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved