static函数_jonluce static 函数

static修饰符是一个能够减少此类命名冲突的有用工具。例如,以下声明语句

static int a;

其含义与下面的语句相同

int a;

只不过,a的作用域限制在一个源文件内,对于其他源文件,a是不可见的。因此,如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以static修饰符声明。

static修饰符不仅适用于变量,也适用于函数。如果函数f需要调用另一个函数g,而且只有函数f需要调用函数g,我们可以把函数f与函数g都放到同一个源文件中,并且声明函数g为static:

static int

g(int x)

{

}

void f() {

b=g (a);

}

我们可以在多个源文件中定义同名的函数g,只要所有的函数g都被定义为static,或者仅仅只有其中一个函数g不是statico因此,为了避免可能出现的命名冲突,如果一个函数仅仅被同一个源文件中的其他函数调用,我们就应该声明该函数为static。

static函数

在C语言编程中,static的一个作用是信息屏蔽!
比方说,你自己定义了一个文件--该文件中有一系列的函数以及变量的声明和定义!
你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在该函数、变量的前面加上static,代表他们只能被当前文件中的函数使用!

而在C++中,用static来作为信息屏蔽就显得没有必要了!因为,C++有了信息屏蔽的利器--class机制!

类中的private属性的变量和函数就对外禁止访问!

然后是C/C++通用的函数作用域的static型的变量!其目的,也是为了信息的屏蔽!
intfun(){
staticinta=1;
a++;
}
在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1!

以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作!

在static发明前,要达到同样的功能,则只能使用全局变量:

inta=1;

intfu【】n(){
a++;
}
那么,a的值就有可能被其他函数所改变!

最后,说说类中的static变量和函数。

这种存储属性的变量和函数是同一种类的不同实例之间通信的桥梁!
#include<iostream>
usingnamespacestd;

classA{
public:
staticintnum;//统计创建了多少个实例
A(){num++};//每创建一个实例,就让num自增1

//返回通过构造函数所创建过的A类实例的数目
staticinthow_many_instance(){
returnnum;
}
}

staticA::num=0;//需要在类申明的外部单独初始化!

intmain(){
cout<<A::how_many_instance()<<endl;
Aa,b,c,d;
cout<<A::how_many_instance()<<endl;
system("pause");
}

一般,在类内部,是通过static属性的函数,访问static属性的变量!
Q.HowdoesstaticlocalvariableworksinC/C++?
A:Localstaticvariableispersistentbetweenfunctioncalls.Itisnotsupposedtobedestructedattheendoffunction.
Seethefollowingexample.
#include<iostream>
usingnamespacestd;
classApple{
public:
Apple(int,int);
voidaddSize(intm){size+=m;}
voidprintApple(){cout<<"TheAppleis"<<size<<"and"<<type<<"."<<endl;}
~Apple();
private:
intsize;
inttype;
};
Apple::Apple(ints,intt){
size=s;
type=t;
}
Apple::~Apple(){
printApple();
}
voidtestStatic(){
staticApplea2(20,6);
a2.addSize(10);
a2.printApple();
}
intmain(){
testStatic();//TheAppleis30and6.
testStatic();//TheAppleis40and6.
return0;
}

Yousee!!!testSatic()hasbeencalledtwice,andtheaddSize(10)effectaccumulated.
static函数_jonluce static 函数
Note:ThereislocalstaticvariableinJava.
Q.WhatdoesstaticfunctionmeaninC?Canyougiveanexample?
A:staticfunctionisonlyvisiblebythefileitself.
Ifyouincludeastaticfunctioninaheaderfile,youmuchincludeitsbodytomakethefunctionusable.Seethefollowingexample,sum1()isstatic,sum2isnot,noticethecodedifferences.
//=======
//aa.h
#ifndefAA_H
#defineAA_H
intsum2(inta,intb);
staticintsum1(inta,intb);
intsum1(inta,intb){
returna+sum2(b,10);
}
#endif
//=======
//aa.c
#include"aa.h"
intsum2(inta,intb){
returna+b;
}
//=======
//test.c
#include"aa.h"
intmain(){
printf("%dn",sum1(3,4));//17
printf("%dn",sum2(9,4));//13
}
//=======
Readmorefromhere:

http://bobcat.webappcabaret.net/javachina/faq/cpp_01.htm#cpp_static_ttl
补充一点,在类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的,这一点对于windows的回调机制非常有用。
因为对于回调函数而言,windows不会借助任何对象去调用它,也就不会传递this指针,那么对于一般成员函数作为回调函数的后果,就是堆栈中有一个随机的变量会成为this指针,这当然会引发程序的崩溃。
而static函数,由于是整个类的,屏蔽了this指针。因此,如果成员函数作为回调函数,就应该用static去修饰它。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/249689.html

更多阅读

round函数怎么用 精 java round函数怎么用

round函数怎么用 精——简介round函数通常用于四舍五入求值,通常函数中会传入两个参数,第一个参数是要四舍五入的数字。第二个参数就是位数,按此位数对第一个参数进行四舍五入。round函数使用的范围很广,下面就跟随小编一起来看看round

VBA编程中MsgBox函数怎么用 vba msgbox

VBA编程中MsgBox函数怎么用——简介Excel编程中的MsgBox函数用于输出一个对话框,该函数在编程调试以及输出结果方面具有极为重要的意义。下面小编就为大家讲解一下该函数的具体使用方法。VBA编程中MsgBox函数怎么用——方法/步骤

excel公式函数详解:19 yearfrac函数用法介绍

excel公式函数详解:[19]yearfrac函数用法介绍——简介一个良好的规划对于生活品质和工作效率都极其重要,在实际生活中我们往往需要计算一年有几个项目,每个项目需要花费多长时间。不同的工作其所花的中心也应该不一样。在excel中有一个

MATLAB 各种 对数函数 用法以及实例 matlab 对数函数

MATLAB 各种 对数函数 用法以及实例——简介在MATLAB运算当中,我们常常需要求对数,在编写M文件的过程中,我们也需要表示对数,下面我就通过一些示例介绍一下如何在MATLAB中求对数。MATLAB 各种 对数函数 用法以及实例——工具/原料MATLA

excel标准差函数 excel概率标准差函数

excel标准差函数——简介excel怎么求一系列数据的标准方差呢?请往下看excel标准差函数——工具/原料excelexcel标准差函数——stdev函数excel标准差函数 1、STDEV函数估算的标准偏差是基于样本的,这里标准偏差的计算使用“n-1”方

声明:《static函数_jonluce static 函数》为网友亡命男人分享!如侵犯到您的合法权益请联系我们删除