C++ static关键字

写在前面:

C++中的所有成员(包括函数和变量)都具有作用域、可见域、生存期、存储域、可变性几个概念。所有的成员都可以用这个几个概念去分析和区分。

{}就定义了可见域

private/pretoct/public就定义了可见域

static关键字就定义了可见域、生存期、存储域

const就定义了可变性

static关键字首先继承了C语言中关键字的语义:

1、如果修饰局部变量,这此局部变量变为全局变量(但也此变量也只在作用域可见),并且只初始化一次;

2、如果修饰全局变量或者函数,则表示此全局变量和函数只在此文件中可见。

在C++中,上述的功能肯定具有,但除了上述的功能外,还有其他功能。

(其实还是从static能够修饰的成员来进行理解)

static可以修饰:(前3个是C中的就有的对象)

1、全局变量(注:对象也属于变量);

2、局部变量;

3、全局函数;

4、类定义中的成员变量;

5、类定义中的成员函数。

4、修饰类定义中的成员变量:

作用:把此成员变量提升为全局变量,其可以独立于对象而存在。主要用于同一个类中的所有对象共享同一个属性或进行数据通信。

注意:1、其必须在进行初始化;

2、当其和public关键字结合时,其和全局变量基本上没有区别,因为可以同个“类名::变量名”进行全局访问;

3、但当其和private关键字结合时,其和全局变量就有区别了,其进行了隐藏,只能够在类内(比如类的静态成员函数中)或者实例化的对象方法中访问了;

4、其比全局变量的另一个区别是其没有进行全局命令空间(相当于他的名字为"类名::变量名"),不会和其他全局变量名相冲突。

5、修饰类定义中的成员函数:

作用:也是使成员函数独立对象而存在,其可以在未创建任意一个对象时就存在了;所以其不能访问类中的非静态成员(包括成员变量和成员函数)。

注意:1、非静态成员函数,其实是每一个函数都具有一个默认的this指针作为形参,方便知道是哪个对象调用的它;但是由于静态成员函数不属于任何对象,所以没有this指针的参数;

2、非静态成员可以随意的访问静态成员,但是反之不行(万一未实例化对象,则访问的成员不存在,会出现异常);

3、由于静态成员函数没有this指针的额外开销,所以静态成员函数的访问(可以在编译时就进行处理)要比非静态成员函数快;

4、静态成员函数的访问也有两种。

思考:

若修饰类定义中非静态成员函数中的局部变量又会怎样呢?(可以进行验证)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值