static几点

静态变量

函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数

在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

 
静态函数(内部函数)

函数本质上是全局的,默认可以被所有其他函数引用.
内部函数
只能在本文件中被引用的函数.定义内部函数时,在函数名和函数类型的前面加static.
外部函数
定义函数时,如果在函数首部最左端冠以关键字extern,标识次函数为外部函数,C语言规定,如果在定义函数是省略extern,则隐含为外部函数.
在调用此函数的文件中,需要用extern声明所用的外部函数.


静态全局变量

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。   
这两者的区别虽在于:
1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
   
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。   
从以上分析可以看出————
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。


静态全局函数是文件作用域的只能在本文件内有效;全局函数可以被同一工程的别的文件使用


若全局变量仅在单个C文件中访问,则可将此变量改为静态全局变量,以降低模块间的耦合度;
若全局变量仅由单个函数访问,则可将此变量改为该函数的静态局部变量,以降低模块间的耦合度。

静态成员函数

静态成员函数可以直接调用该类的实例中的私有成员。

可以这样子理解:外部不允许访问私有成员是说类以外代码不允许访问。 因而私有成员可以被类的成员函数(静态成员函数)和其实例的成员函数(非静态成员函数)所访问。

由于static成员函数的调用不存在this指针的问题,所以不存在重载(overload)与覆盖(override)的问题,对于可以区分的情况下,会直接调用,如果子类存在与基类相同的函数,则基类对象调用的则是基类的静态函数,子类调用的是子类静态函数.子类亦可调用基类静态函数,但需要用base::指定类作用域.

静态成员是可以用.或者::来调用的
  .   是对象名.静态成员
  ::   是类名::静态成员

-> 不能使用,因为静态成员是被存放在单独的内存中的,类内非静态成员都隐含有this指针

子类不能从父类继承的有:
    1. 构造函数
    2. 拷贝构造函数
    3. 析构函数

posted @ 2009-07-28 09:46  dzqabc  阅读(207)  评论(0编辑  收藏  举报