c++中static关键字使用总结

作用 参考代码 备注
面向对象中的static 静态全局变量
static int a = 5;   //默认为extern
int b = 6;  //默认为extern
int main( )
{
      //code
}

(1)该变量在全局数据区分配内存;具有全局寿命;

(2)未经过初始化的静态全局变量,默认初始化为0;

(3)a为静态变量,并且是全局的,只能在定义a的文件中使用a,在其他的文件中不可见

静态局部变量

void fun()

{

    int a = 1;

    static int b = 2;

}

void main()

{

    static int b = 3;

}

(1)静态局部变量在全局数据区分配内存,具有全局寿命;

(2)静态局部变量在对象被第一次声明时初始化,以后的调用都不用再初始化。

(3)未被初始化的静态局部变量,默认初始化为0;

静态函数

static void fun ()

{

       //code

}

只能在定义它的文件中使用,在其他文件不可见。

面向过程中的static

(在类中使用)

静态数据成员

 程序见下面pro1

(1)非静态数据成员,每个类对象都有自己的拷贝。然而静态数据成员,不管这个类被对象被定义了多少次,都只有一个拷贝,所有对象共享这一个拷贝,所有对象共用,它的值可以更新。

(2)静态数据成员存储在全局数据区,不能再类的声明中定义。语句int Point::countP = 0;是定义静态数据成员。

(3)由于静态数据成员在全局数据区分配内存,所以它不属于特定对象,在没有类的实例情况下就可以操作它。

(4)静态数据成员初始化格式:

<数据类型><类名>::<静态数据成员名>=<值>

注意只能在全局区初始化,不可以在类内部初始化。

访问形式:

<类对象名>.<静态数据成员名>

<类对象指针> -> <静态数据成员名>

<类名>::<静态数据成员名>

(5)静态数据成员同样遵循public、protected、private访问规则。

静态成员函数  

与静态数据成员规则一样。

访问形式:

<类名称>::<静态成员函数名>(参数列表);

类对象操作符.  和该对象指针 ->

参考:https://blog.csdn.net/mary19920410/article/details/69053361

 pro1:

#include<iostream>
using namespace std;
 
class Point
{
public:
	Point(int xx = 0, int yy = 0) 
        { 
            this->X = xx; 
            this->Y = yy; 
            countP ++; 
        }
	Point(Point &p); 
	~Point() { countP --; }
	int GetX() const{ return this->X; }
	int GetY() const{ return this->Y; }
	void GetC() const{ cout << "Object id = " << countP << endl; } //输出静态数据成员
private:
	int X, Y;
	static int countP; //静态数据成员声明,用于记录点的个数
};
 
Point :: Point(Point &p)
{
	this->X = p.X;
	this->Y = p.Y;
	countP ++; //在构造函数中对countP累加,所有对象共同维护同一个countP
}
 
int Point :: countP = 0; //静态数据成员定义和初始化,使用类名限定
 
int main()
{
    Point A(4, 5); // 定义对象A,其构造函数会使countP增1
    A.GetC(); //输出对象个数
    Point B(A); //定义对象B,其构造函数会使countP增1
    B.GetC();
 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liuzubing/article/details/81184343