C++
静态成员的概念
静态类中的成员加入static修饰符,即是静态成员。
静态成员的初始化和访问
(1) 一般静态成员需要在类外赋值
(2) 常量静态成员变量可以直接在类中定义赋值 类内初始化
(3) 类::变量 和 类对象都可以访问
#include <iostream>
using namespace std;
class A
{
public:
const static int bb = 4; //常量静态成员变量可以直接在类中定义赋值
static int mm;
int nn;
};
int A::mm = 3; //
class B
{
public:
int nn;
};
int main()
{
A aa;
cout << "mm的值 = " << aa.mm << endl;
cout << "bbd的值 = " << aa.bb << endl;
return 0;
}
静态数据成员特点
(1) 静态数据成员被当做是类的成员,无论这个类被定义了多少个,静态数据成员都只有一份拷贝,为该类型的所有对象所共享(包括其派生类).
(2) 静态成员存放在全局区,所以不计入类的内存计算。
(3) 静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。
静态成员函数
与普通的成员函数相比,静态成员函数只可以访问静态成员这其中包括 静态成员常量 和 静态函数。因为静态成员函数没有this指针。
静态成员函数的使用
静态成员函数可以通过 类::静态函数的形式直接使用
class A
{
public:
int b;
static int a;
static void fun();
};
int A::a = 0;
void A::fun()
{
cout << a <<endl; //只能直接使用静态成员变量
}
//void A::fun(A & c)
//{
// cout << a <<endl; //只能直接使用静态成员变量
// cout << c.b <<endl; //这样可以调用非静态成员函数
//}
int main(int argc, char const *argv[])
{
A a;
A::fun();
return 0;
}
C
静态全局变量
特点: (1) 存储位置 : 全局数据区
(2) 需要初始化,不初始化则自动为0
(3) 使用范围 : 当前文件夹
静态局部变量
特点: (1) 存储位置 : 全局数据区
(2) 需要初始化,不初始化则自动为0
(3) 使用范围 : 当前函数,但是函数结束,变量没有销毁
#### 当前文件的静态变量对其他文件隐藏
静态函数
在函数的返回类型前加上static关键字
(1) 使用范围 : 当前文件夹