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 <iostream>
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;
}
结果如下: