static成员变量 & static成员函数

一、static成员变量

1.静态成员变量的定义,与静态类型变量的定义方式一样,要在成员变量之前加关键字static。

2.不同于未初始化的静态全局变量会被赋予默认值,静态成员变量必须手动初始化,并且,由于它存储在内存的静态存储区,故而在C++语法中静态成员变量只能在类体外初始化。此时,前面不需要加关键字static。

3. 静态成员变量属于类而不是对象,因而它不含有隐含的*this指针参数。静态成员变量在类定义时就被分配存储单元,被所有对象共享,它的初始化必须在对象构造之前。

4.  静态成员变量可看成加了访问权限控制的全局变量。它的初始化方式都一样,只是公有、私有和受保护的静态成员访问权限不同而已。公有静态成员,既可以通过类的对象进行访问,也可以通过类名直接访问;私有的和保护的静态成员变量则只能被该类的公有成员函数和友元函数访问。

5. 父类的static变量和函数在派生类中依然可用,但是受访问性控制。对static变量来说,派生类和父类中的static变量是共用空间的,这点在进行引用计数的时候要特别注意。

二、static成员函数

1. 静态成员函数的定义与非静态成员函数的定义的区别在于要在成员变量之前加关键字static。

2. const修饰的成员函数本质上是一个加上了访问控制的全局函数。它属于类本身,可被所有的对象访问。由于函数不隐含this指针参数,因而函数不能访问非静态成员,只能访问类的静态的成员、全局变量、外部函数和变量等。

3. 静态成员函数若想访问类的非静态成员需要借助实例化的对象或指针。

4. 静态成员函数首先是一个成员函数,它可以定义为内联函数,也可以在类体外定义,但此时函数名前不必加关键字static。

5. const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而static成员函数本质上是全局函数,调用规约是__cdecl或__stdcall。因而不能用const来修饰static成员函数。

6. static成员函数是没有“虚函数”一说的。因为全局函数不存在虚函数。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章