摘要:本文主要向大家介绍了C/C++知识点:c与c++的static,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点:c与c++的static,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
面向过程
静态局部变量
在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)
#include <cstdlib>#include <iostream>
using namespace std;
void counter(){
static int count = 0;
++count;
cout<<count<<" time called!"<<endl;
}
int main(int argc, char *argv[]) {
counter();
counter();
counter();
counter();
system("PAUSE");
return EXIT_SUCCESS;
}
output:
1 time called!
2 time called!
3 time called!
4 time called!
静态全局变量
在模块内,在函数体外,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问,它是一个本地的全局变量
静态函数
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用,这个函数被限制在声明它的模块的本地范围内使用
面向对象
静态数据成员
在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见
初始化:静态数据成员必须初始化,并且只能在类外初始化;由于静态数据成员不属于某一个对象,因此不能通过构造函数的方式初始化静态数据成员
静态函数成员
在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,非静态成员函数可以任意地访问静态成员函数和静态数据成员;静态成员函数不能访问非静态成员函数和非静态数据成员
#include <cstdlib>#include <iostream>
using namespace std;
class testStatic{
private:
static int a;//不允许在内部初始化不是const类型的static变量
static const int aconst=10;
int b;
public:
testStatic(){}
testStatic(int btemp){
b=btemp;
}
static int geta(){
++a;
return a;
}
};int testStatic::a=100;//类中静态成员初始化的形式,主函数调用之前完成初始化,程序结束释放
int main(int argc, char *argv[]) {
testStatic test1;
cout<<testStatic::geta()<<endl;
cout<<test1.geta()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
static存储
函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉, static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间
static优势:可以节省内存,因为它是所有对象所公有的,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号