1.静态成员变量是属于整个类的全局变量,它不单属于某个对象,普通成员变量是属于类中对象的变量。
它不能被所有对象共享
2.静态成员变量必须在全局进行定义,而成员变量由于是属于该类某个对象的,而不是属于整个类的,因此不用在全
局进行定义。
3.在使用静态成员变量时,可以不限定为某个具体的对象,只与类名连用即可
如 A::total 而不用 A a; a.total;
4.静态成员在没有对象之前就存在
/*
#include <iostream>using namespace std;
class A
{
public:
A(int num):it(num){total++;} //构造类A并实例化该类的私有成员变量it和静态成员变量total,每构造一次,执行total加1操作
virtual ~A(){total--;} //每析构一次,执行total减1操作
virtual int get(){return it;} //定义虚函数get,该函数返回私有变量it的值
virtual void set(int age){it=age;}//定义虚函数set,该函数设置私有变量it的值
static int total; //声明一个整型静态成员变量total
private:
int it; //声明私有成员it
};
int A::total=0; //定义该静态成员变量并且将其初始化为0
int main()
{
const int max=5;int i; //定义常整型max并将其值赋为5,定义变量i
A*a[max]; //声明一个指向类A的指针数组a,并将它的元素个数设置为max
for(i=0;i<max;i++) //从0开始,循环到max的值结束,也就是5
a[i]=new A(i); //每循环一次开辟一个新空间,然后将地址保存在指针数组a的一个元素中
for(i=0;i<max;i++)
{
cout<<"该类有"<<A::total<<"个对象。\n"; //由于静态变量是属于类而不是对象的,因此要用类来访问它
cout<<"正在删除第"<<a[i]->get()<<"个对象。\n";
delete a[i]; //删除指针数组指向的各个对象,同时delete会默认调用 析构函数来销毁对象
}
return 0;
}
*/
/*
#include <iostream>
using namespace std;
class A
{
public:static int x;
};
int A::x=10; //注意在定义静态成员变量x的时候也要加上类名和限定符(A::)。
int main()
{
A a, b, c;
cout<<a.x<<endl<<b.x<<endl<<c.x;
return 0;
}
*/
//(4)静态成员在没有对象之前就存在。如:
#include <iostream>
using namespace std;
class A
{
public:
static int n;
};
int A::n=0;
void show(){cout<<A::n<<"a \n";}
int main()
{
int i;
for(i=0;i<5;i++)
{
A::n++; //访问静态成员变量n并对其进行自加操作
show(); //调用全局函数show,该函数输出静态成员变量n的值
}
return 0;
}