数据成员可以分为静态变量和非静态变量两类。

静态类的静态成员加入静态修饰符,是静态成员。可以直接使用类名+静态成员访问静态成员,因为静态成员存在于内存中,非静态成员需要实例化内存分配,因此静态成员不能访问非静态成员。因为静态成员存在于内存中,因此非静态成员可以直接访问类的静态成员。

非静态成员:没有静态成员的所有都是非静态成员,当实例化类时,可以访问它们。通过实例化类的非静态成员的生存取决于生存和静态成员没有生存理念,由于静态成员都居住在内容。

一个类还可以包含静态和非静态成员,该类还包括静态构造函数和非静态构造函数。

可以从两个方面加以总结。第一个方面主要是相对于流程导向的,也就是说,它不涉及这方面的课程。第二个方面主要是静态在课堂中的作用。

第一,静态关键字在面向过程设计中的应用

1。静态全局变量

定义:在全局变量之前,关键字静态,变量被定义为一个静态全局变量。

特点uff1a

a,它在全局数据区域分配内存。

b:初始化:如果未显式初始化,则隐式初始化将为0(自动变量是随机的,除非显式初始化)。

c,变量只在源文件中可见,严格地说应该从文档的定义开始到结束。


例(C++程序设计教程-钱编辑P103): / / file1.cpp
1
#包括
无效FN();
静态静态定义静态全局变量
主()
{
n=20;
cout << FN();
}
无效FN()
{
氮+;
cout << }


在d、文件范围下声明的常量常量是静态存储类型。

静态变量都在全局数据区域分配内存,包括稍后将提到的静态局部变量:




一般程序中新生成的动态数据存储在堆区域中,函数中的自动变量存储在堆栈区域中,自动变量通常在函数退出时释放空间。静态数据,甚至是函数中的静态局部变量,也存储在全局数据区域中。由于函数的退出,全局数据区域的数据不会释放空间。细心的读者可能会发现示例1中的代码将是

静态静态定义静态全局变量



改变:

全局变量的定义

程序运行正常。事实上,定义一个全局变量可以实现文件中变量的共享,但是定义静态全局变量有以下好处。

静态全局变量不能被其他文件使用;(这似乎是在外部的不同)
其他文件可以定义具有相同名称的变量,不会发生冲突。


您可以将上述示例代码更改如下:


2
/ / file1
#包括
无效FN();
定义的静态全局变量(只能在这个文档中使用)
主()
{
n=20;
cout <<
extern int n;(这个变量可以被其他文件引用)
无效FN()
{
氮+;
cout <<


编译和运行示例2,您会发现上面的代码可以单独编译,但是当链接尝试时会出现错误。

静态静态定义静态全局变量

相反

全局变量的定义

重新编译运行程序和仔细了解全局和静态全局变量的区别。

2,静态局部变量

定义:当静态关键字添加到本地变量之前,定义静态局部变量。

让我们举一个静态局部变量的例子,如下所示:


3
#包括
无效FN();
主()
{
(FN);
(FN);
(FN);
}
无效FN()
{
静态n=10;
cout <<


通常,变量在函数体中定义,每次程序运行到语句时,本地变量被分配给堆栈内存,但是当程序退出主体时,系统将恢复堆栈的内存,并且本地变量将相应地失败。

但是有时我们需要在两个调用之间保存变量的值,一般的思想是定义一个全局变量来实现,但是这样,变量不再是函数本身,不再仅仅由函数控制,这给程序的维护带来不便。

静态局部变量可以解决这个问题,静态局部变量保存在全局数据区,而不是堆栈中,每个值保留到下一个调用,直到下一个新值被赋值。

特点uff1a

a,它在全局数据区域分配内存。

b,初始化:如果未显式初始化,则隐式初始化将为0,以后的函数调用不再初始化。

C,它总是驻留在全局数据区域,直到程序结束。但是它的作用域是一个局部作用域,当函数或语句块在结束时定义时,它的作用域就结束了。

三.静态函数(注意区别于类的静态成员函数)

定义:将静态关键字添加到函数的返回类型中,函数被定义为静态函数。

特点uff1a

a,静态函数,不同于普通函数。它只能在其文件中看到,不能被其他文件使用。 U3000 U3000



静态函数示例:


4
#包括
静态空洞(FN);静态函数
主()
{
(FN);
}
定义静态函数
{
int = 10;
cout <<


定义静态函数的好处:

静态函数不能被其他文件使用。
其他文件可以定义具有相同名称的函数,并且不会发生冲突。


两。面向对象的静态关键字(类中的静态关键字)

1。静态数据成员

在类内数据成员声明之前添加关键字static,它是类中的静态数据成员。首先给出静态数据成员的一个示例。


5
#包括
类
{
公共:
Myclass(int,int,int c);
Void GetSum();
私人:
a,b,c;
静态整数和;声明静态数据成员
};
Int Myclass::金额= 0; / /定义和初始化静态数据成员



Myclass::Myclass(int,int,int c)
{
此= a = a;
>;
这一点;
总和+ = A + B + C;
}

我::GetSum()无效
{
cout <<总和=<<


正如您所看到的,静态数据成员具有以下特性:

对于非静态数据成员,每个类对象都有自己的副本。静态数据成员是类的成员,定义是不管多少这个类的对象,在程序中只有一个副本的静态数据成员,这是由该类型的所有对象共享,说,静态数据成员是类的所有对象共同的。对于这一类的多个对象,静态数据成员为所有对象共享一块内存。因此,一个静态数据成员的值是为每个对象相同,其值可以更新。
静态数据成员存储在全局数据区。静态数据成员分配空间时,它的定义,所以它不能在类的声明中定义。在例5中,声明int Myclass::金额= 0;是静态数据成员的定义;
静态数据成员遵循公共、保护和私有访问以及普通数据成员的规则。
因为静态数据成员在全局数据区域中分配内存,所以属于这个类的所有对象都是共享的,因此它不属于特定的类对象,并且在没有生成类对象时,它的作用域是可见的,因此我们可以在不生成类实例的情况下操作。
静态数据成员的初始化与一般数据成员的初始化不同。静态数据成员初始化的格式是:
数据类型>类名> <静态数据成员资格>值>
类的静态数据成员有两种访问方式:
类对象名称。静态数据成员名称或类类型名称::<静态数据成员名称>
如果允许静态数据成员的访问权限(即公共成员),则在上述程序中引用静态数据成员。
静态数据成员主要用于每个对象具有相同的属性。例如,对于一个存款类,每个实例的兴趣是相同的。因此,利息应该被设置为存款类的静态数据成员。首先,无论定义多少个存款对象,利息数据成员共享在全局数据区域中分配的内存,从而节省存储空间。
与全局变量相比,使用静态数据成员有两个优点:


静态数据成员不进入程序的全局命名空间,因此在程序中不存在与其他全局名称冲突的可能性。

信息隐藏可以实现,静态数据成员可以是私有成员,全局变量不是;

2、静态成员函数

像静态数据成员,我们可以创建一个静态成员函数,它的所有类,而不是一个特定类的对象,静态成员函数,如静态数据成员是类的内部实现,属于类定义的一部分。普通成员函数通常意味着这个指针,这个指针指向类本身的对象,因为普通成员函数总是属于一个类的具体对象。总的来说,这是一个默认的函数fn()实际上是这-> FN()。然而,与普通函数相比,静态成员函数不任何对象相关,所以它没有this指针。在这个意义上,它不能访问非静态数据成员属于类对象的RS,也不访问非静态成员函数。它只能调用静止的静态成员函数。


6
#包括
类
{
公共:
Myclass(int,int,int c);
静态的GetSum(); /声明静态成员函数
私人:
a,b,c;
静态整数和;声明静态数据成员
};
Int Myclass::金额= 0; / /定义和初始化静态数据成员
Myclass::Myclass(int,int,int c)
{
此= a = a;
>;
这一点;
和+非静态成员函数可以访问静态数据成员。
}
无效:(getsum MyClass): / /静态成员函数
{
/ / cout<


一个类的静态成员不同于一般的类成员:静态成员是独立的对象的实例,它是类本身有关。它们被用来执行这个类封装的功能和数据,但不包括一个特定对象的功能和数据,和静态成员包括静态和静态特性。

静态属性包含要封装在类中并可以由所有类的实例共享的数据。事实上,除了固定类和受限访问之外,类的静态属性与函数的全局变量非常相似。

静态方法实现了类需要封装的函数,与特定对象无关。静态方法非常类似于全局函数。静态方法可以完全访问类中的属性,或者可以通过对象的实例来访问,不论访问限定符。

不包含任何非静态成员的类可以称为静态类,静态类也可以理解为一个全局变量和函数的名称空间!

用来调用的常用方法。> PHP将建立一个变量,静态方法不属于任何对象。在某些情况下,我们甚至希望在没有有效对象调用的情况下,您应该使用静态方法。PHP将在静态方法中创建这个变量,即使您从一个对象调用它们。

你可以写一个方法来判断这是否是建立在显示它是否被调用的静态或nonstatically。当然,如果使用静态关键字,不管它是如何调用的,这个方法总是静态的。

您的类也可以定义常量属性,不需要使用公共静态,只使用const关键字。常量属性总是静态的。它们的属性的类,而不是实例化这个类的对象的属性。

PHP静态方法与非静态方法效率问题

1。静态成员的访问效率不一定高于非静态成员的访问效率。

2,只需要调用一个类方法的返回值,静态方法更合理,否则会因为新增加额外的开销。

以上是PHP静态成员变量和非静态成员变量的引入Xiaobi。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。