static数据成员

静态数据被看作类类型内的全局变量。对于非静态数据成员,每个对象都有自己的副本,而静态数据成员在整个类种只有一份,可以被类的所有对象共享访问。与全局变量相比,静态数据成员有以下两个优点:

  • 静态数据成员没有进入程序的全局作用域,只是在类的作用域内;
  • 可以实现信息隐藏,静态成员可以是private成员,而全局变量则不能;
class obj{
	static int cnt;//静态数据成员
	public:
		//构造函数中应当存在cnt
		obj(){cnt++;}
		~obj(){cnt--;}
		int getCnt() const {return cnt;}  
};

static数据成员不是属于某个特定对象,因而不能在构造函数中初始化。
static数据成员在类定义之外初始化,在定义时要使用类名字限定静态成员,但不需要重复出现static关键字。

int obj::cnt = 0;
//对静态数据成员的初始化

static成员只能被定义一次,定义一般不放在头文件中,而是放在包含成员函数定义的源文件中。

  • 静态数据成员从属于类,非静态数据成员从属于对象;
  • 静态数据成员存放于静态存储区,由本类的所有对象共享,生命期不依赖于对象;
  • 非静态数据成员独立存放于各个对象中,生命期依赖于对象,随对象的创建而存在,随对象的销毁而消亡;

static const

class Account{
	static double rate;
	double balance;
	static const int maxClientNumber;
	public:
	...	
};
const int Account::maxClientNumber = 2;//初始化类中的常量

C++中可以在类定义中初始化整值类型的static const,而其他类型不能在类中初始化。

静态数据成员访问

类的成员函数可以直接访问。非成员函数可以通过对象或指针来访问,也可以通过类名限定的静态成员函数来访问。

class obj{
	static int cnt;//静态数据成员
	friend void func(obj& o);//将func声明为obj的友元
	public:
		//构造函数中应当存在cnt
		obj(){cnt++;}
		~obj(){cnt--;}
		int getCnt() const {return cnt;}  
};
int obj::cnt = 0;//初始化
void func(obj& o){
	cout << o.cnt << endl;//成员访问法
	cout << obj::cnt << endl;//类名限定访问
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值