在c++中static的用法
展开全部
用静态成员和静态函数的好处是保证实例的唯一性,不是属于某个对象,而是属于这个类的。 这样可以减少消耗,对于许多函数都要调用的函数可以将其设为静态函数,内存只有一份拷贝实例。
静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
在某个类A中声明一个static int number;初始化为0。这个number就能被所有A的实例共用。在A的构造函数里加上number++,在A的析构函数里加上number--。那么每生成一个A的实例,number就加一,每销毁一个A的实例,number就减一,这样,number就可以记录程序中共生成了多少个A的实例。
这只是静态成员的一种用法而已。
静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.
静态变量都在全局数据分配内存,包括后面将要提到的静态局部变量,对于一个完整的程序,在内存中的分布情况如下 代码区- 全局数据区- 堆区- 栈区
一般由new产生出来的动态数据存放在堆区,函数内部的自动变量存放在栈区。 自动变量一般会随着函数的退出而释放空间,静态数据(包括函数内部的静态局部变量)也存放在全局数据区,全局数据区的数据不会因为函数的退出而释放空间。
Static静态变量不能为其它文件所用(这个区别于extern的)
静态数据成员只能而且必须在类外初始化
静态成员函数里面没有隐藏this指针。
非静态成员函数可以访问静态数据成员。 静态成员函数不能访问非静态数据成员。
关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数.
静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
在某个类A中声明一个static int number;初始化为0。这个number就能被所有A的实例共用。在A的构造函数里加上number++,在A的析构函数里加上number--。那么每生成一个A的实例,number就加一,每销毁一个A的实例,number就减一,这样,number就可以记录程序中共生成了多少个A的实例。
这只是静态成员的一种用法而已。
静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.
静态变量都在全局数据分配内存,包括后面将要提到的静态局部变量,对于一个完整的程序,在内存中的分布情况如下 代码区- 全局数据区- 堆区- 栈区
一般由new产生出来的动态数据存放在堆区,函数内部的自动变量存放在栈区。 自动变量一般会随着函数的退出而释放空间,静态数据(包括函数内部的静态局部变量)也存放在全局数据区,全局数据区的数据不会因为函数的退出而释放空间。
Static静态变量不能为其它文件所用(这个区别于extern的)
静态数据成员只能而且必须在类外初始化
静态成员函数里面没有隐藏this指针。
非静态成员函数可以访问静态数据成员。 静态成员函数不能访问非静态数据成员。
关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询