static函数与普通函数的区别:
用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突。
用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突。
<2> 静态函数不能被其他文件所用。
静态变量,存储在静态存储区。
c语言中,静态函数的存储位置
#include<iostream>
class FatherClass{
public:
static void ptlog(){
printf("In class father \n");
}
};
class ChildClass{
public:
static void ptlog(){
printf("In class child \n");
//静态方法不能调用非静态方法,报错
//normalBeCall();
}
void normalCall(){
//非静态方法可以调用静态方法
ptlog();
}
void normalBeCall(){
printf("if ok? \n");
}
};
void callStatic(){
FatherClass fath;
ChildClass child;
fath.ptlog();
child.ptlog();
}
int main(int argc, char* argv[])
{
callStatic();
return 0;
}
总结就是:静态不能调普通,普通可以调静态。看懂原理这个很容易理解。