静态数据成员和静态成员函数

C++中的全局数据对于任何一个类的对象或其他源程序来说都是相等的,与C一样放在所有类和函数外面
如果在一个.cpp文件中定义了一个全局变量,其他的源文件要用是时,必须加上extern说明。

使用全局变量会带来不安全性,因为全局数据在整个程序中都是可见的,都可以对其进行修改,若不小心改错了将会影响整个程序的运行结果。并且全局变量与对象程序的封装性是相悖的,破坏了设计的信息隐藏。

为此C++提出了静态数据成员的概念,静态数据成员的值对同一个类的每一个对象都是一样的,一但某个对象中的静态数据成员更改了,则所有对象都会访问到更新后的值。
定义如下:

static <数据类型> <静态数据成员名>;

静态数据成员有如下性质:

  1. 是某类的所有对象都共享的数据成员。静态数据成员独立于类的任何对象而存在,与类关联,但不是与类对象关联。
  2. 必须对他进行初始化,其的初始化在类外进行,而前面不加static,以避免与一般静态变量或对象混淆。初始化时不加该成员的访问权限控制符private,public 等。初始化时要用作用域标明所属类。格式为 <数据类型> <类名> :: <静态数据成员名> = <值>;
  3. 静态数据成员的引用方式 静态数据成员可以定义为private或public 。如果是定义为public,可直接引用。格式为:<类名>::<静态成员名> 或 <对象名>.<静态成员名> 或 <对象指针>-><静态成员名>。如果是定义为private,只有通过公共接口函数引用
class Student{
public:
	static int counts;
	Student( ){ Counts++ ; }
};
int Student::Counts = 0 ;
int main()
{
	Student stu1,stu2;
	cout<<"the number is :"<<Student :: Counts<<endl;
	return 0;
}

也可以定义类的静态成员函数 :static <成员函数>
static 成员函数没有this指针,因其不是任何对象的组成部分。它可以直接访问所属类的static成员,但不能直接访问非static 成员static 成员函数在类外实现时前面也不加static。另外,不能用const修饰,也不能申明为虚函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值