免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 59877 | 回复: 15
打印 上一主题 下一主题

[函数] 静态函数和普通函数的区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-26 16:09 |只看该作者 |倒序浏览
在c++中类的成员函数都是保存在静态存储区中的 ,那静态函数也是保存在静态存储区中的,他们都是在类中保存同一个惫份,那他们有什么区别吗?除了普通成员函数要通过对象调用,而静态成员可以通过类直接调用以外,好象就只有说静态函数只能访问类中的静态成员变量了。
还有其他的区别吗?加入静态函数的目的是什么呢??

论坛徽章:
0
2 [报告]
发表于 2007-07-26 16:19 |只看该作者
比如java,main就是个静态的方法。感觉就是因为他没有办法实例化自身。
怎么感觉回答的不对题啊。就当我灌水好了:)

论坛徽章:
0
3 [报告]
发表于 2007-07-26 17:31 |只看该作者
静态函数没有this指针

论坛徽章:
0
4 [报告]
发表于 2007-07-26 19:22 |只看该作者
那加入静态函数的目的是什么呢?他能解决什么问题类中的其他函数解决不了的呢?

论坛徽章:
0
5 [报告]
发表于 2007-07-26 20:20 |只看该作者
如果某些成员函数只访问静态数据成员,那么最好把他们声明为静态的成员函数,因为这样不需要特定的对象就可以访问这些成员变量了。

我觉得目的应该只是这个吧。至于说静态成员函数没有this指针,只能访问静态变量。。。这些都属于语法规则而已,不是目的。

论坛徽章:
0
6 [报告]
发表于 2007-07-26 20:26 |只看该作者

  1. class a
  2. {
  3.     static int fun(){}
  4. };

  5. ||

  6. static int fun(){}
  7. class a
  8. {
  9. };

  10. ||

  11. namespace a
  12. {
  13.     int fun(){}
  14. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2007-07-26 21:02 |只看该作者
楼上什么意思啊  看不懂  不好意思

论坛徽章:
0
8 [报告]
发表于 2007-07-30 18:58 |只看该作者
原帖由 gaozhongshan 于 2007-7-26 16:09 发表
在c++中类的成员函数都是保存在静态存储区中的 ,那静态函数也是保存在静态存储区中的,他们都是在类中保存同一个惫份,那他们有什么区别吗?除了普通成员函数要通过对象调用,而静态成员可以通过类直接调用以外 ...


首先,函数不是对象,它代表的是一段代码,位于代码段,而不是位于静态存储区——静态存储区是数据区的一种,用来存放在程序中定义的静态对象。

对类的静态和非静态函数的不同的调用要求决定了它们在使用上的方便程度:非静态成员函数要通过对象调用,所以要求首先建立一个对象;而静态成员函数可不建立对象就可以被使用。因此,与类的非静态数据成员无关的成员函数,虽然可以被定义为非静态函数,但是如果定义为静态函数的话在使用上会更加方便。

另外,如果类的成员函数想作为回调函数来使用,一般情况下只能将它定义为静态成员才行。

论坛徽章:
0
9 [报告]
发表于 2007-07-30 19:18 |只看该作者
原帖由 gaozhongshan 于 2007-7-26 16:09 发表
在c++中类的成员函数都是保存在静态存储区中的 ,那静态函数也是保存在静态存储区中的,他们都是在类中保存同一个惫份,那他们有什么区别吗?除了普通成员函数要通过对象调用,而静态成员可以通过类直接调用以外 ...



静态函数不需要类的实列就可以调用:

一般函数

CCLP *pclp = new CCLP;
pclp->YourProceudre();

静态函数

CCLP::staticprocedure();

论坛徽章:
0
10 [报告]
发表于 2007-07-30 20:25 |只看该作者
原帖由 gaozhongshan 于 2007-7-26 19:22 发表
他能解决什么问题类中的其他函数解决不了的呢?


比方说,光靠类中”其他“函数,不能将类中的某个“其他”函数当作线程的入口地址。
楼主可以尝试使用 pthread_create 或 windows的 CreateThread 试试看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP