C++类的静态成员

定义类的静态成员,能够实现同类的多个对象之间数据共享,使用类的静态成员有如下的优点:

  • 静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突;
  • 静态成员可以实施封装,可以是私有成员,而全局对象不可以;
  • 静态成员是与特定类相关联的,结构清晰。


class Employee{

    private:

        int maxlevel;

        int level;

    public:

        int c;

        static int count;

        static int Data(int i=0){ return i;}

};

int Employee::count = 0;

类的静态成员需要在  定义类之后,和用这个类实例化对象之前,给这个类里的静态数据成员初始化,而且初始化的方式必须是在类外

为什么呢?因为类的静态数据成员是属于类的,为所有的该类的对象所共享,所以必须在实例化对象之前就进行初始化,但是呢,却不可以在类体里初始化,因为,类的定义只是声明了一种数据类型,并没有开辟内存空间,因此也无从初始化了

同样的道理,类的非静态成员也不能在类体里初始化,因为类的非静态成员只有在类实例化某个对象之后,才开辟出内存空间供其使用。

下面我来看一下类的存储格式:



下面讲述静态数据成员的特点:

  1. 通常来说,类的非静态数据成员存在于该类类型的每个对象之中,静态数据成员则独立于该类的任何对象,在所有对象之外,单独开辟空间存储。在为对象所分配的空间中不包含静态成员所占的空间。
  2. 如果只声明了类而未定义对象,则类的非静态数据成员是不占存储空间的,只有在定义对象时,才为对象的数据成员分配空间。但是只要在类中定义了静态数据成员,即使不定义任何对象,也为静态数据成员分配空间,它可以在尚未定义对象时就被引用。
  3. 访问静态成员(静态数据成员、静态成员函数)时,同样需要遵守公有及私有访问规则。
  4. 静态数据成员必须在类外部定义,静态成员不能通过类的构造函数进行初始化的,而是在类外定义时进行初始化。
  5. 静态数据成员可用作默认实参,非静态数据成员不能用作默认实参,因为它的值不能独立于所属的对象而使用。
  6. 有了静态数据成员,各对象之间实现数据共享,因此可以不使用全局变量。


下面是一个关于静态成员函数的例子:



静态成员函数不能调用非静态数据成员,但可以调用静态数据成员;

而非静态成员函数既可调用非静态数据成员,又可调用静态数据成员。

静态成员函数可以用两种方式来调用,一种是:类名::静态成员函数,另一种是:该类的一个实例对象名 . 静态成员函数




和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。

静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针。因此静态成员函数不能访问本类某个对象的非静态数据成员。(对this指针不懂可以看看这里:this指针

或者也可以这样记:静态成员函数是专门为了访问静态数据成员的

注意:静态成员函数不能被声明为const

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值