C/C++知识点:c与c++的static
小标 2018-07-10 来源 : 阅读 737 评论 0

摘要:本文主要向大家介绍了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+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程