注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++小知识22—C++中的静态成员  

2011-10-10 11:03:09|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C++小知识22—C++中的静态成员
今天又在这儿闹了笑话,呵呵,看来真老了,记混了,原来才在看《C语言尝试剖析》中还分析了下static的作用呢,看来好记性不如烂笔头,再写一次吧。static在C语言中的作用:
1、修饰全局变量
目的只有一个,使这个变量只能在本地文件使用,更严格的说,是从定义的这一行开始到文件结束,在此之间使用也要使用extern来声明。
2、修饰局部变量:
只在函数中使用,一次赋值,多次使用,不过,即使本文件中也无法在其它的地方使用。
3、修饰函数:
同上,只能应用在本文件,主要是因为函数默认都是extern的,所以得有一个和他对着干,好多人其实不明白这个,认为函数没有写extern就不是extern。其实你写上也没事儿,写不写一回事。
说完了C里面,说说在C++里头:
1、拥有和C语言里相同的功能。
2、这才是重点,可以修饰类成员。
1)修改成员变量,这里遇到的问题是记混了,认为只要写在类的声明外面即可,但忽略了还有一条限制,不可以在.h文件里进行定义。访问的方式很简单可以直接用.或->;也可以用类名::变量来访问。
静态成员有三个地方可以进行定义来分配空间和内存,一个是在.h头文件中,一个是在.cpp里,一个是在main函数前的全局定义处。头文件类声明中不能进行空间分配,所以不行,那么今天的错误是因为在头文件的类声明外定义,为什么也不成呢,因为这个头文件可能会被多个其它文件包含,造成重复定义和声明,引起编译错误。而main函数前使用,会象全局变量一样,凡是使用处都得声明一下,这就不好了。
那么只能在.cpp前定义啦,但还得注意:在.CPP文件中定义时不要加上static.
否则不就变成在C语言中的使用方式了么?其实在这才关键
另外还得注意,静态成员变量是在所有的类对象中共享的。
2)修饰函数,这里其实除了可以直接使用不再声明对象外,更需要注意的是静态成员函数只能访问静态成员变量,原因很简单,类对象还没有分析空间地址呢,你怎么访问非静态的,没影儿的东西,怎么访问。这才是关键。
访问的方式仍是可以用类对象的方法或者直接使用类名::函数名称,这样的方法。
学习static要和const关键字一起学习会理解的更清楚,不过前提是别弄混了。
其实总结开来,static和非static的区别就在于有没有this指针这个东东。
先写这点儿,有别的再补充,其实今天的问题主要是:
1、在.h文件中的类声明外定义静态变量。
2、.cpp定义时为什么不可以加static
  评论这张
 
阅读(875)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017