C++static静态变量

1、static 变量在静态区,不管是局部静态还是全局静态,其生命周期与程序相同。从作用域和生命周期考虑问题分析。在内存分区的全局数据区分配内存,用时可以改变其值。
2、static静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
3、static 类成员变量,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象存在。静态数据成员只分配一次内存。静态数据成员存储在全局数据区。static类数据成员是与类关联的,但不与该类定义的对象有任何关系。static类对象必须要在类外进行初始化。所有对象共享一个static类成员。
4、static:静态全局变量只在定义它的文件内有效,也在全局数据区,默认自动初始化为0。
5、static 函数 1.出现在类内:静态类函数不会访问或者修改非static数据成员和成员函数,类的静态成员(变量和方法)属于类本身,而非对象的。也就是所有该类的对象共同拥有这一个成员函数,而不是普通的每个对象各自拥有一个成员函数 。因此static类成员函数是没有this指针的,this指针是指向本对象的指针,static类成员函数不能访问非static的类成员,只能访问 static修饰的类成员
6、static 函数 1.出现在类外,用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说它可以被其它代码文件调用。
————————————————
版权声明:本文为CSDN博主「小飞侠hello」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_16370559/article/details/91781127

使用static变量统计对象的个数,代码如下:

// static.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include 
using namespace std;

class Point
{
public:
	Point(int x = 0, int y = 0):x(x),y(y)
	{
		count++;
	}
	Point(Point &p)
	{
		x = p.x;
		y = p.y;
		count++;
	}

	~Point() { count--; }
	int getX() { return x; }
	int getY() { return y; }
	void showCount() { cout << "Object count = " << count << endl; }
private:
	int x, y;
	static int count; //静态数据成员声明
};

int Point::count = 0;


int main()
{
	Point a(4, 5);
	cout << "Point a: (" << a.getX() << "," << a.getY() << ")" << endl;
	a.showCount();

	Point b(a);
	cout << "Point B:(" << b.getX() << "," << b.getY() << ")" << endl;
	b.showCount();
	return 0;
    
}

结果如下:
C++static静态变量_第1张图片

你可能感兴趣的:(C++程序设计,C++)