static

13 篇文章 1 订阅

static在面向过程和面向对象设计中有不同的用法:

  1. 在面向过程设计中的static应用于普通变量和函数,不涉及类
  2. 面向对象设计中的static主要说明static在类中的应用

一、面向过程设计中的static

1、静态全局变量

在全局变量前加上static关键字,该变量就被定义成一个静态全局变量。

特点:

  • 该变量在全局数据区分配内存
  • 未经初始化的静态全局变量会自动初始化为0(非静态变量的值是随机的)
  • 静态全局变量只在本文件内可见,而在文件之外是不可见的

优点:

  • 静态全局变量不能被别的文件引用,这意味着static可以屏蔽extern关键字
  • 在其他文件可以声明具有相同名字的变量,不会发生冲突

2、静态局部变量

在局部变量前加上static关键字,该变量就被定义成一个静态全局变量。

作用:在函数内部定义的变量,会随着函数的退出而消亡,而当加入static关键字后,局部变量并不会随着函数的退出而消亡。

特点:

  • 该变量在全局数据区分配内存
  • 静态局部变量在程序执行到该对象声明处使初次初始化,即以后的函数调用不再进行初始化
  • 如果静态局部变量没有被初始化值,则默认初始化为0
  • 它始终停留在全局数据区,直到程序结束,但是其作用域为局部作用域,作用域会随着函数的结束而结束

3、静态函数

在函数的返回值类型前加上static关键字,则该函数则被声明为静态函数。静态函数的作用域仅为本文件,即不能被其他文件调用。

特点:

  • 不能被其他文件调用
  • 其他文件可以存在同名函数,不会发生冲突

二、面向对象中的static

1、静态数据成员

在类中数据成员声明前加上static关键字,该数据成员就是类中的静态数据成员。

特点:

  • 静态数据成员为所有类对象共享。对类的多个对象来说,静态数据成员只分配一次,供所有对象公用。对于任何一个类对象来说,静态数据成员的值都是一样的
  • 静态数据成员存储在全局数据区,静态数据成员在定义时要分配内存,因此静态数据成员不能再类内定义
  • 静态数据成员必须初始化(类外),并且唯一初始化的方式为:<数据类型> <类名>::<静态数据成员名>=<值>
  • 静态数据成员和普通数据成员的访问规则是相同的
  • 在没有实例化对象时也可以操作静态数据成员
  • 访问静态数据成员有两种方式。1、通过对象。2、通过作用域

2、静态成员函数

        静态成员函数和静态数据成员的声明类似,也是在前边加上static关键字即可。同样它对所有类对象有效,而非某个对象,其属于类定义的一部分。

特点:

  • 没有this指针
  • 可以访问静态的成员函数和数据成员,不可以访问非静态的成员函数和数据成员
  • 非静态的成员函数可以访问静态的成员函数和数据成员
  • 不能将静态的成员函数设置程虚函数,因为其没有this指针
  • 访问方式有两种。1、类对象 2、作用域

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值