static主要定义全局静态变量、定义局部静态变量、定义静态函数。
1.定义全局静态变量:
在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。
2.定义局部静态变量:
在局部变量前面加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 作用域为局部作用域,当定义它的函数或语句块结束时,作用域结束。
3.定义静态函数:
在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源文件中使用
b.在文件作用域中声明的inline函数默认为static类型
C++类中的static:
1.static成员变量:
相当于类的一个固有属性,与类产生的对象无关,但是类的所有对象进行的成员变量的操作都能影响到它的变化。同时,该成员变量不能在类之中进行初始化,只能在类外进行初始化。如果是static const 进行定义那么可以在类内部进行初始化
2.static成员函数:
1.定义全局静态变量:
在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。
a.在全局区分配内存。
b.如果没有初始化,其默认值为0.
c.该变量在本文件内从定义开始到文件结束可见。
2.定义局部静态变量:
在局部变量前面加上关键字static,其特点如下:
a.该变量在全局数据区分配内存。
b.它始终驻留在全局数据区,直到程序运行结束。
c. 作用域为局部作用域,当定义它的函数或语句块结束时,作用域结束。
3.定义静态函数:
在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
a.静态函数只能在本源文件中使用
b.在文件作用域中声明的inline函数默认为static类型
C++类中的static:
1.static成员变量:
相当于类的一个固有属性,与类产生的对象无关,但是类的所有对象进行的成员变量的操作都能影响到它的变化。同时,该成员变量不能在类之中进行初始化,只能在类外进行初始化。如果是static const 进行定义那么可以在类内部进行初始化
2.static成员函数:
static成员是类的组成部分并不是任何对象的组成部分,因此,static成员函数没有this指针。我们知道,一般而言,类中的成员函数具有一个附加的隐含实参,即指向该类对象的一个指针。这个隐含实参命名为this。因为static成员函数不是任何对象的组成部分,所以static成员函数就没有this形参了。由于成员函数声明为const说明该成员函数不会修改该成员函数所属的对象,所以static成员函数不能声明为const。为什么呢?因为static成员函数不是任何对象的组成部分。static成员函数可以直接访问所属类的static成员,但是不能直接使用非static成员函数!也不能访问static const 类型的成员!在上面的代码中static int age_play()函数中如果是return name或者是return k都不行!
#include <iostream>
#include <string>
using namespace std;
class Person
{
private:
string name;
static int age;
int k;
public:
Person(const string&nm):name(nm)
{}
void Print()
{
cout<<name<<" is "<<age<<endl;
}
void age_change(int age){
this->age=age;
}
static int age_play(){
cout<<age<<endl;
return age;
}
};
int Person::age=10;
int main()
{
Person person("tom");
person.Print();
Person person0("su");
person.Print(); //su is 10
person0.age_change(20);
person0.Print(); //su is 20
cout<<person0.age_play();
cout<<endl;
return 0;
}