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

高手请看看,为什么在类的static函数中可以访问对象的private成员

楼主juping_chen(jack)2006-07-04 20:58:58 在 C/C++ / C++ 语言 提问

高手请看看,为什么在类的static函数中可以访问对象的private成员,  
  同时,设置对象的private成员后,在对象中打印并不是那个设置值.  
   
  #include   <iostream.h>  
  #include   <stdio.h>  
  class   pclass  
  {  
  private   :  
  int   a;  
  public:  
    pclass()  
    {  
    a   =30;  
    printf("pclass   init\n");  
    }  
    static   void   settest(pclass   pc);  
    void   printclass()  
    {  
    printf("%d\n",a);  
    }  
  };  
  void   pclass::settest(pclass   pc)  
  {  
  pc.a   =   10;//此处怎么可以访问  
  printf("%d\n",pc.a);  
  }  
   
  void   main()  
  {  
  pclass   a;  
  a.settest(a);  
  a.printclass();//问什么不是上步设置的值  
  getchar();  
  } 问题点数:20、回复次数:16Top

1 楼I_Love_CPP(Never stop!)回复于 2006-07-04 21:13:35 得分 0

1,你仔细去看一下public,private访问权限的描述;  
  2,你传的是值,也就是说你那个函数访问的仅仅是那个对象的一个拷贝而不是其本身,  
  修改为:  
  static   void   settest(pclass&   pc);//传引用Top

2 楼juping_chen(jack)回复于 2006-07-04 21:25:53 得分 0

谢谢!我是说pc.a   =   10;此处怎么可以访问,a是私有函数,怎么可以用对象访问  
  Top

3 楼Helloooooo(每天,我都新的)回复于 2006-07-04 21:29:11 得分 0

因为他们都是自己人。Top

4 楼juping_chen(jack)回复于 2006-07-04 21:57:25 得分 0

函数中   pc保存在那里,起什么作用Top

5 楼Improving()回复于 2006-07-04 22:35:21 得分 0

类中的private成员变量只能在类的内部被访问,也就是说,只能在类的成员函数中进行访问。pc.a   =   10;是写在void   settest(pclass   pc);中的,所以属于在成员函数中访问pc.a。所以可以编译通过。Top

6 楼ahao(天·狼·星星)回复于 2006-07-04 23:49:27 得分 0

private是对类来说的,不是对对象来说的。  
  只要是同一个类的,就可以访问其他对象的private成员  
  Top

7 楼al0n9(终于有四条内裤了)回复于 2006-07-05 09:58:50 得分 0

估计楼主想问的是静态成员函数为什么可以访问非静态的成员变量吧?  
  你这样试试  
  void   pclass::settest(pclass   pc)  
  {  
  this->a   =   pc.a;  
  std:cout<<"this->a"<<this->a<<"pc.a"<<pc.a<<std::endl;  
  }  
  这样应该是编译不过去的,对比一下你就能明白静态成员函数对静态成员变量的访问限制。Top

8 楼hhyytt(鹦鹉螺)回复于 2006-07-06 16:41:46 得分 0

只要是同一个类的,就可以访问其他对象的private成员  
  Top

9 楼navyblue1982(这家伙很懒)回复于 2006-07-06 20:18:15 得分 0

如果采用引用那么它的值就会改变  
  #include   <iostream.h>  
  #include   <stdio.h>  
  class   pclass  
  {  
  private   :  
  int   a;  
  public:  
  pclass()  
  {  
  a   =30;  
  printf("pclass   init\n");  
  }  
  static   void   settest(pclass&   pc);  
  void   printclass()  
  {  
  printf("%d\n",a);  
  }  
  };  
  void   pclass::settest(pclass&   pc)  
  {  
  pc.a   =   10;//此处怎么可以访问  
  printf("%d\n",pc.a);  
  }  
   
  void   main()  
  {  
  pclass   a;  
  a.settest(a);  
  a.printclass();//问什么不是上步设置的值  
  getchar();  
  }  
   
  这样试试看  
  Top

10 楼navyblue1982(这家伙很懒)回复于 2006-07-06 20:18:55 得分 0

你应该了解一个函数的调用过程    
  Top

11 楼powersuite(套套)回复于 2006-07-06 20:46:42 得分 0

传值和传地址的区别Top

12 楼chenxin0910(灰色诡计)回复于 2006-07-13 20:42:05 得分 0

传值只是原来的一个copy   ,返回时就释放掉了.  
  类的对象当然可以访问它自己的私有成员啊!Top

13 楼cosety()回复于 2006-07-13 20:53:59 得分 0

1.对于类对象是可以访问本类的私有成员的  
  2.由于是传值,所以在settest结束后,作用域结束pc.a的值被释放.Top

14 楼THK007(QQ)回复于 2006-07-14 00:09:07 得分 0

静态成员函数它也是成员函数,私有成员变量就是有成员函数来访问的。没什么问题啊。Top

15 楼lythrum(lythrum)回复于 2007-03-07 15:56:55 得分 0

pc.a   =   10    
  pc是pclass的一个对象。Top

16 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2007-03-07 16:04:40 得分 0

就这么规定的呀。Top

相关问题

关键词

得分解答快速导航

  • 帖主:juping_chen

相关链接

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

广告也精彩

反馈

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