CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

我笨死,一个简单的问题。。。。。

楼主thuers(我什么都不会,所以我想多看看)2005-05-30 11:49:01 在 C/C++ / C++ 语言 提问

#include   <iostream.h>    
   
  class   A  
  {  
  public:  
  A(int   i){a=i;};  
  int   c;  
  private:  
  int   a;  
  };  
   
  void   main()  
  {  
  cout<<sizeof(A)<<endl;  
  A   x(8),y(9);  
  int   A::*P   ;  
  P   =   &A::c;  
  x.*P=3;  
  y.*P=4;  
  cout<<x.c<<endl;  
  cout<<y.c<<endl;  
  }      
   
  P的地址是?  
  怎么解决不同对象间c的值问题~! 问题点数:50、回复次数:10Top

1 楼qhfu(改个名字)回复于 2005-05-30 11:57:08 得分 0

p是指向A的成员的指针Top

2 楼wasoxi(我就是(没意思~~~))回复于 2005-05-30 12:06:00 得分 0

int   A::*P   ;  
  P   =   &A::c;  
  x.*P=3;  
  y.*P=4;//不懂你为什么要这样做的  
  直接:  
  x.c   =   3;  
  y.c   =   4;   //这样不可以吗?Top

3 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-05-30 12:06:27 得分 0

什么意思?  
  不懂,  
  你想让不同对象c的值相同?  
   
  那用static   int   c;Top

4 楼dongpy(51-->ARM)回复于 2005-05-30 12:08:10 得分 0

P的地址是?  
  ===============  
  P是指向类成员的指针变量,存放类成员的偏移。  
   
  它的地址是一个栈地址。Top

5 楼thuers(我什么都不会,所以我想多看看)回复于 2005-05-30 12:15:05 得分 0

我也刊布懂这程序  
   
  别人发给我的~!  
  Top

6 楼Cuiql(向前冲,向后看)回复于 2005-05-30 12:22:18 得分 0

P的地址是:类A中c的地址.Top

7 楼thuers(我什么都不会,所以我想多看看)回复于 2005-05-30 12:24:13 得分 0

可是一直是0000000Top

8 楼foochow(无聊,灌水......)回复于 2005-05-30 12:43:49 得分 50

指向数据成员的指针  
   
    尽管刚开始时,指向成员的指针的语法会使你有一点点的迷惑,但你不久会发现它其实同普通的指针差不多,只不过是*号的前面多了::符号和类的名字,例:定义一个指向int型的指针:          
  int   *   pi;            
    定义一个指向为int型的类的数据成员:          
  int   A::*pmi;   //pmi是指向类A的一个int型的成员          
    你可以这样初始化它:          
  class   A  
  {  
   public:  
   int   num;  
   int   x;  
  };  
  int   A::*pmi   =   &   A::num;            
    上面的代码是声明一个指向类A的一个int型的num成员并将它初始化为这个num成员的地址.通过在pmi前面加上*你就可以使用和更改类A的num成员的值:          
  A   a1,   a2;  
  int   n=a1.*pmi;   //把a1.num赋值给n  
  a1.*pmi=5;   //   把5赋值给a1.num    
  a2.*pmi=6;   //   把6赋值给6a2.num            
    如果你定义了一个指向类A的指针,那么上面的操作你必须用   ->*操作符代替:          
  A   *   pa=new   A;  
  int   n=pa->*pmi;    
  pa->*pmi=5;Top

9 楼llf_hust()回复于 2005-05-30 12:48:25 得分 0

#include   <iostream>    
  using   namespace   std;  
  class   A  
  {  
  public:  
  A(int   i){a=i;};  
  int   c;  
  private:  
  int   a;  
  };  
   
  void   main()  
  {  
  cout<<sizeof(A)<<endl;  
  A   x(8),y(9);  
  int   A::*P   ;  
  P   =   &A::c;  
  x.*P=3;  
  y.*P=4;  
  cout<<&x.c<<endl;  
  cout<<y.c<<endl;  
                      cin.get();  
  }      
   
  /*   输出为:8  
                      0012FED0  
                      4  
  */  
   
  Top

10 楼fengbaotiaorulei(风暴跳如雷)回复于 2005-05-30 14:17:47 得分 0

int   A::*p;  
   
  这是定义了一个整型指针,加上A::限定了这个指针的作用域范围只能在A中,但他不属于这个类的成员,所以他无法访问类中的私有数据  
   
  也就是说指针p在这个类中和平常的指针一样,但出这个类它就变的不可见了,这个指针和类中的成员没有什么关系,把它放到类外面一样,放到外面只不过作用域大了而已Top

相关问题

  • 还是分页问题…… 我快笨死了……
  • 99个妹妹都不理偶,我完了该怎么办,偶笨死了
  • 各位大哥,99个妹妹都不理偶,我完了该怎么办,偶笨死了
  • 笨死了 请教:CString + CString 到底结果是什么,怎么工作的?
  • 巨简单.......可我不会.....
  • 简单问题,我不会。
  • ###########################简单的问题,救我!
  • 简单问题,帮帮我
  • 简单问题,我忘了?
  • 特简单,但我不会

关键词

  • pmi
  • pa
  • cout
  • void main
  • private
  • include

得分解答快速导航

  • 帖主:thuers
  • foochow

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo