C/C++ static基本用法

作用:

1.修饰普通变量,修改变量的存储区域生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值就用默认初始化值;

2.修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名函数重名,可以将函数声明为static;

3.修饰成员变量,修饰成员变量是所有的对象只保存一个变量,而且不需要生成对象就可以访问该成员,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象存在。static类数据成员是与类关联的,但不与该类定义的对象有任何关系,就是static不会像普通类数据成员一样每一个类对象都有一份,全部类对象是共享一个static类成员的,例如A类对象修改了static成员为1,那么B对象对应的static类对象成员的值也会是1.;

4.修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在static函数内不能访问非静态成员

5.在使用static变量时,就和使用普通的全局变量一样,区别只是要在变量名前加上类范围符的前缀::

6.static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化。因为static是所有对象共享的,必须要比对象先存在。

好处:

用static修饰的成员变量在对象中是不占内存的,因为他不是跟对象一起在堆或者栈中生成,用static修饰的变量在静态存储区生成的,所以static修饰可以节省对象的内存空间。例如,创建多个object对象,而他们都有共有的一个变量。

#include

using namespace std;

class object

{

public:

    static int number;//声明static变量

    int val;

    static void test()  //修饰成员函数

    {

        //cout << val << endl;报错,不能访问非静态成员

        cout << number << endl;

        printf("这是静态成员函数\n");

    }

};

int object::number = 1;//类外初始化,不需要生成对象就可以访问该变量

int main()

{

     cout << object::number << endl;

     //int object::number = 1;报错,只能在类外初始化

    //object::val = 2;报错,无对象不能访问val

    object::test();//不需要生成对象就可以访问该成员函数

    return 0;

}

你可能感兴趣的:(C/C++ static基本用法)