作者:myj2017 | 来源:互联网 | 2023-09-24 16:17
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。对该类
的静态有两种用法:面向过程编程中的静态和面向对象编程中的静态。 前者适用于常规变量和函数,与类无关后者主要说明静态在类中的作用。
另一方面,面向过程设计中的静态1、全局静态变量为全局数据区域分配存储器;
未初始化的静态全局变量由程序自动初始化为0。 除非明确初始化,否则自动变量的值是随机的。
静态全局变量显示在整个声明的文件中,而不显示在文件之外。
2、局部静态变量为全局数据区域分配内存;
静态局部变量只有在程序运行到该对象的声明目标时才初始化。 这意味着以后的函数调用将不再初始化。
静态局部变量一般在声明处初始化,如果未显式初始化,程序会自动初始化为0;
在程序执行结束之前,它将一直驻留在全局数据区。 但是,该范围是局部范围,当定义该范围的函数或语句块结束时,该范围将结束
3、静态函数静态函数不能在其他文件中使用;
其他文件可以定义同名函数,没有冲突;
二、面向对象的静态关键字(类中的静态关键字) 1、类的静态数据成员静态数据成员对该类中的所有对象都是公共的。 对于该类中的多个对象,静态数据成员只分配一次内存,以便所有对象都可以共享。 因此,静态数据成员的值在所有对象中是相同的,并且可以更新该值;
静态数据成员存储在全局数据区域中。 无法在类声明中定义,因为在定义静态数据成员时分配空间。 在Example 5中,语句int Myclass:Sum=0; 定义静态数据成员;
静态数据成员与常规数据成员一样遵循公共、保护和私有访问规则;
静态数据成员为全局数据区域分配内存,并由属于类的所有对象共享,因此不属于特定类对象,如果未生成类对象,则会显示范围。 也就是说,如果未生成类的实例,则可以对其进行操作。
静态数据成员初始化与常规数据成员初始化不同。 静态数据成员的初始化格式如下:
<; 数据类型>; <; 类名>;<; 静态数据成员名称>;=<; 值>;
类的静态数据成员有两种访问格式。
<; 类对象名称>; <; 静态数据成员名称>; 或<; 类型名称>;<; 静态数据成员名称>;
如果允许静态数据成员访问,也就是说,公共成员可以在程序中按上述格式引用静态数据成员。
静态数据成员主要用于每个对象具有相同属性的情况。 例如,对于存款类,每个实例的利息都是一样的。 所以,应该让利息成为存款类的静态数据成员。 这有两个优点。 第一,无论定义了多少存款对象,利息数据的成员都共享分配给全局数据区域的内存,从而节省存储空间。 第二,如果需要变更利息,只要变更一次,所有存款对象的利息都会全部变更。
2、类静态成员函数出现在类外的函数定义不能指定关键字static;
静态成员之间的相互访问,包括静态成员函数对静态数据成员的访问和对静态成员函数的访问;
非静态成员函数可以自由访问静态成员函数和静态数据成员。
静态成员函数无法访问非静态成员函数和非静态数据成员。
由于没有this指针开销,静态成员函数与类的全局函数相比速度稍快。
调用静态成员函数。 使用成员访问操作符(.)和(-),可以在类的对象或指向类对象的指针上调用静态成员函数,也可以直接使用以下格式:
<; 类名>;<; 静态成员函数名称>; (<; 参数表>;
调用类的静态成员函数。