在学习C语言时就已经接触到了static,中文意思为静态的,它主要用在三个地方
它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用
private: static int a;声明时指明为static
};
int student::a=0;必须在类定义体的外部定义,并在定义时初始化,且不能标示为static
一般而言,类的static成员,像普通数据成员一样,不能再类的定义体中初始化。但有个例外
{ public:void func();
private: const static int a=0;定义同时初始化
};
const int student::a; //可加可不加
2.static成员函数
static成员是类的组成部分也不是任何对象的组成部分,因此,static成员函数没有this指针,static成员函数也不能被声明为const和虚函数
3.使用类的static成员
可以通过作用域操作符从类直接调用static成员,因为static成员不从属于的的任何对象
或者通过对象、引用或指向该类类型对象的指针间接引用
student::a;
1.定义全局静态变量,使得全局变量改变其作用域:其他文件不可访问该全局变量,编程者不用担心其他人用了什么全局变量
它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用
因为它总是保留着上一次调用函数后的值,因此常用来做计数器
3.定义静态函数, 静态函数不能被其他文件所用。
不同于C语言,C++还有面向对象的层面:
static类成员
1.static数据成员:static数据成员孤立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联static数据成员的定义
class student
{public:void func();
private: static int a;声明时指明为static
};
int student::a=0;必须在类定义体的外部定义,并在定义时初始化,且不能标示为static
一般而言,类的static成员,像普通数据成员一样,不能再类的定义体中初始化。但有个例外
只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化
(新的C++标准已支持const static数据成员在类的定义体是进行定义并初始化)
class student{ public:void func();
private: const static int a=0;定义同时初始化
};
const int student::a; //可加可不加
2.static成员函数
static成员是类的组成部分也不是任何对象的组成部分,因此,static成员函数没有this指针,static成员函数也不能被声明为const和虚函数
3.使用类的static成员
可以通过作用域操作符从类直接调用static成员,因为static成员不从属于的的任何对象
或者通过对象、引用或指向该类类型对象的指针间接引用
student::a;