C++学习模板篇(静态数据成员与静态成员函数)

前面学过:

普通数据成员和普通的成员函数

常数据成员和常成员函数

今天学习:

静态数据成员和静态成员函数

1.如何声明

直接在普通的数据成员和普通的成员函数的前面加上static就成了静态的。

C++学习模板篇(静态数据成员与静态成员函数)_第1张图片

静态成员变量属于类本身,而不属于某个对象,所以它不依赖于对象的实例化,不会在类的构造函数中初始化,它的初始化往往单独进行,如上图所示,初始化时不再加static关键字,必须定义在类外,注意初始化形式和位置,前面必须写上类型,然后写上属于哪个类,最后赋处置。

2.访问方式

C++学习模板篇(静态数据成员与静态成员函数)_第2张图片

3.普通数据成员和静态数据成员的区别

如下图所示,实例化了t1,t2,t3,t4四个对象以后,普通数据成员m_strCode也随着四个对象的产生而分别产生了四个,而在对象诞生之前,静态成员变量s_iCount就已经诞生了,而且只诞生一次,在四个对象产生的过程中,这个静态数据成员的值会变化(累加),但是数量始终是一个,不会随着对象的增加而变化,

C++学习模板篇(静态数据成员与静态成员函数)_第3张图片

4.从this指针谈静态成员函数

举例如下类Tank,

C++学习模板篇(静态数据成员与静态成员函数)_第4张图片

对比普通成员函数和静态成员函数两种调用成员变量的不同:普通成员函数fire虽然看上去一个参数都没有,但是它却有一个隐形的参数this指针,通过this指针就可以知道当前要调用的是哪一个对象对应的数据成员或者是成员函数;因为static变量或函数相对于所有的对象来说,相当于是全局的,因此调用时根本不用区分,普通成员函数当然也能调用。

而静态成员函数没有隐形的this指针作为参数,如果调用普通数据成员,则无法知晓究竟调用的是哪一个对象的数据成员或成员函数,而因为静态的数据成员和成员函数不属于某个对象,属于类本身,可以认为是全局的,所以在静态函数里面能够调用。

总结以上,得出结论:

(1)非静态成员函数可以调用静态的成员函数和成员变量

(2)静态的成员函数却不可以调用非静态的成员函数和成员变量,而只能调用静态的

C++学习模板篇(静态数据成员与静态成员函数)_第5张图片


最后总结静态成员变量和静态函数的使用注意事项:

C++学习模板篇(静态数据成员与静态成员函数)_第6张图片

你可能感兴趣的:(C++学习模板篇(静态数据成员与静态成员函数))