码迷,mamicode.com
首页 > 其他好文 > 详细

第25课 类的静态成员变量

时间:2016-04-16 00:36:58      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

1. 成员变量的回顾

(1)通过对象名能够访问public成员变量

(2)每个对象的成员变量都是专属的

(3)成员变量不能在对象之间共享

2. 静态成员变量

(1)C++中的静态成员变量

  ①静态成员变量属于整个类所有

  ②静态成员函变量的生命期不依赖于任何对象

  ③可以通过对象名,也可以通过类名直接访问公有静态成员变量

  ④所有对象共享类的静态成员变量

(2)静态成员变量的特性

  ①在定义时直接通过static关键字修饰

  ②静态成员变量在程序内部位于全局数据区,所以需要类外为其单独分配空间。(因为new或栈中的对象只会为非静态成员分配空间,而不会为静态成员分配,所以必须在类外单独为其分配空间)

  ③为静态成员变量分配空间的语法规则:

Type ClassName::VarName = value;//要像定义全局变量一样放在函数外

【编程实验】静态成员变量的使用

#include <stdio.h>

class Test
{
private:
    static int cCount;

public:
    Test(){cCount++;}

    ~Test(){--cCount;}

    int getCount(){return cCount;}
};

//使用前必须在类外给静态成员变量分配空间
int Test::cCount = 0; //表明要在全局区,而且只能在全局区分配空间,并初始化为0

Test gTest; //cCount增加1

int main()
{
    //int Test::cCount = 0;错误,试图在这里为静态成员分配空间
    
    Test t1; //cCount增加1
    Test t2; //cCount增加1

    printf("sizeof(Test) = %d, sizeof(t1) = %d\n",
                sizeof(Test), sizeof(t1));        //等于1,表示cCount是在全局区分配空间,
                                                  //该变量不属于某个对象本身的。

    printf("count = %d\n", gTest.getCount());//3,通过对象名访问static成员变量
    printf("count = %d\n", t1.getCount());
    printf("count = %d\n", t2.getCount());

    Test* pt = new Test(); //cCount增加1

    printf("count = %d\n", pt->getCount()); //4

    delete pt;   //cCount减1

    printf("count = %d\n", pt->getCount()); //3

    //printf("count = %d\n", Test::cCount);//错误,通过类名只能访问公有的static成员变量

    return 0;
}

3. 小结

(1)类中可以通过static关键字定义静态成员变量

(2)静态成员变量隶属于类所有

(3)每一个对象都可以访问静态成员变量

(4)静态成员变量在全局数据区分配空间

(5)静态成员变量的生命期为程序运行期

第25课 类的静态成员变量

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5397232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!