C++之static

C++之static

静态全局变量

控制变量的存储方式和可见性,静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突。即作用域为本文件,全局变量作用域为整个工程。

函数:静态局部变量,静态函数

先来看程序

void text(){
   static int a=0;//静态局部变量,即使多次调用,也只分配一次内存空间,即只初始化一次,直到所有程序结束。当然,函数本身只有它被调用的时候才会出现这个变量,当函数调用结束的时候这个静态变量仍存在,并且存在的值是上次调用函数之后变量可能修改后的值。
   cout<<a<<endl;
   a++;
}
int main(){
   text();//第一次调用,输出0
   text();//第二次调用,输出1,因为静态局部变量在函数调用结束之后也仍保存上次的状态,其实也就是直到程序结束只分配一次内存资源。
   return 0;
}

所以说,当需要存储先前函数状态的情况下使用static很有用。
静态函数:static 修饰一个函数,这个函数只能在本文件中调用,不能被其他文件调用

类:类中的静态变量,静态类成员函数,静态类对象

  1. 类中的静态数据成员
  2. 静态类成员函数
  3. 静态类对象
    还是从程序开始:
class Account{
public:
    static double m_rate;//静态数据成员,由类对象共享,只分配一次内存资源,因此也不能使用构造函数初始化。
    static void set_rate(const double&x){m_rate=x;}//静态成员函数,没有this指针,所以不能访问非static成员。this作为一个隐式参数,时刻指向对象本身。
}
double Account::m_rate=1;//类中的静态变量应由用户使用类外的类名和范围解析运算符显式初始化
int main(){
   Account::set_rate(1);//两种调用方式,可以像非静态成员函数一样,或者直接<类名>::<静态成员函数名>。
   Account a;
   a.set_rate(1);//也可以创建对象来调用
   static Account obj;//静态对象的范围贯穿程序的生命周期,参考单例模式
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值