CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C++静态函数可以访问非静态变量吗?

楼主zsheep(剑胆琴心)2005-11-12 21:26:50 在 C/C++ / C++ 语言 提问

在函数体内不可以  
  class   A  
  {  
    int   x;  
    int   static   int   funa();  
    int   static   int   funb(A   aa);  
  }  
  A::funa()  
  {  
      cout<<x<<endl;   //error;  
  }  
  但是  
  A::funb(A   aa)  
  {  
      cout<<aa.x<<endl;   //ok?  
  }  
  是不是这样理解呢??  
  问题点数:50、回复次数:23Top

1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-11-12 21:33:08 得分 0

类的静态成员本身没有this指针,   所以无法访问自己的非静态数据成员和成员函数,   需要对象形式来访问.如你所说Top

2 楼rigel2001(大宝)回复于 2005-11-12 21:33:11 得分 0

非静态成员变量通过实例访问,不指定实例默认用this,报错Top

3 楼pongba(刘未鹏|http://blog.csdn.net/pongba)回复于 2005-11-13 02:18:03 得分 0

不要什么问题都拿到坛子上问,随便找本c++入门教材好好看看也能找到答案啊,到论坛上永远学不到系统的知识;-)  
  Top

4 楼playar0709(ClassyK)回复于 2005-11-13 06:21:55 得分 30

你的A::funb如果改写成  
  A::funb(   A*   aa);     //   即参数不使用对象,而使用指针  
   
  就差不多就是  
  A::funb();               //非static,   编译后,其实就是A::funb(   A*   aa=this);   !  
   
  ---  
  :   Chance   is   a   gift   for   those   who   tryTop

5 楼fiftymetre(50米深蓝)回复于 2005-11-14 11:04:00 得分 0

静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.  
     
    非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..  
  Top

6 楼manboo(我从山中来)回复于 2005-11-14 11:22:11 得分 0

不可以啊!Top

7 楼yuanchuang(元创)回复于 2005-11-14 11:39:48 得分 0

不能Top

8 楼wangya110()回复于 2005-11-15 19:37:57 得分 0

静态成员函数可以直接引用静态数据成员,但不能直接引用非静态数据成员.如果想引用非静态成员时,则可以通过对象来引用.  
  <类名>::<静态成员函数名>(参数)  
  <对象名>.<静态成员函数名>(参数)  
  题中x是非静态成员,所以会出现错误!Top

9 楼yuanxiaojin(金子)回复于 2005-11-15 21:00:14 得分 0

static成员是放在静态存储区的,它并不受访问控制符的限制。  
  而其它的成员变量则是放在栈中的,你使用的静态存储区的内容是找不到究竟要去调用那个对象的,所以,错误。Top

10 楼tdrhsb(月亮上砍桂花树的男人)回复于 2005-11-15 22:32:27 得分 0

基础知识啊,唉,好好看书吧!  
  c++得书上都会提到得!!!Top

11 楼Mr_Yang(初级程序员)回复于 2005-11-15 23:13:45 得分 5

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。  
   
  在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。Top

12 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-11-16 15:43:45 得分 5

一个是直接访问,一个是通过对象Top

13 楼Kid4you(Kid4you)回复于 2005-11-16 15:49:23 得分 0

呵呵,今天在Intel面试时候,做到这个题了.   显然不能啊,函数体静态函数怎么知道非静态变量所属的对象呢.Top

14 楼zh1369(口一华)回复于 2005-11-16 17:30:06 得分 0

来晚了   没分了  
  不能,不过可以创立对象,然后访问。Top

15 楼zhouhuahai(道号"虚无")回复于 2005-11-16 17:41:35 得分 0

偶发现一个规律:  
        凡是有五十分以上的题,   都可以看到50米的   .....   佝偻的身影         ~_~Top

16 楼kobefly(科比--网络学习中)回复于 2005-11-16 17:43:52 得分 0

道长也来凑热闹,哈哈Top

17 楼liwf(一叶孤舟)回复于 2005-11-16 18:13:20 得分 10

不能直接访问非静态成员。  
  不过可以通过参数传递近来某个具体对象,然后通过该对象调用其非静态成员。  
  如下:  
  class   A  
  {  
          int   Fun1(void);  
          static   int   Fun2(const   A&   a);  
  };  
   
  static   int   A::Fun2(const   A&   a)  
  {  
        a.Fun1();  
  }Top

18 楼bm1408(向va_list学习~不用VC好多年~)回复于 2005-11-16 19:13:26 得分 0

静态对象属于类的,而并非属于类对象的  
  正如楼上兄台所说,是隐含的this   指针在做怪~~~Top

19 楼VcGreenhand(自由虫)回复于 2005-11-16 20:15:00 得分 0

不能Top

20 楼WuOu(天堂*蓝珀湖*仰音*诚彦)回复于 2005-11-16 20:31:00 得分 0

Mark.Top

21 楼ywchen2000(灌水大帝:努力奋斗)回复于 2005-11-17 00:38:33 得分 0

不能Top

22 楼xjp6688(大平/要做必须最好)回复于 2005-11-17 08:04:52 得分 0

没this指针Top

23 楼zsheep(剑胆琴心)回复于 2005-11-19 14:23:54 得分 0

感谢大家,是可以传指针对象引用非静态变量Top

相关问题

  • C#中静态变量、静态函数的定义?
  • 怎么定义函数的静态变量。
  • 如何在javascript函数中设置静态变量?
  • 静态成员函数中无法使用成员变量吗?
  • 关于静态函数调用成员变量的问题
  • C#类中的静态变量
  • 在c语言里,全局变量是不是静态变量
  • 函数的静态变量名编译完之后变成了什么?
  • <深入浅出MFC 2e> ---- 静态成员(变量和函数)之疑问
  • 关于函数中含静态变量连续重复调用的问题

关键词

  • 函数
  • 指针
  • 静态
  • 成员
  • 变量
  • 对象
  • 引用
  • 访问
  • 参数
  • 题

得分解答快速导航

  • 帖主:zsheep
  • playar0709
  • Mr_Yang
  • oyljerry
  • liwf

相关链接

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

广告也精彩

反馈

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