欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

static类成员、static类函数

程序员文章站 2024-02-18 15:25:22
...

1.static类成员

  1.静态数据成员是一种特殊的数据成员,以关键字static修饰。
  2.静态的数据成员在内存中只占一份空间,保存在全局区(静态区),即静态数据成员属于类而不属于对象,为所有实例(对象)共享,当某一个实例(对象)修改了该静态成员变量,其修改值为所有实例(对象)可见。
  3.静态的数据成员不占用对象的空间,保存在全局区,所以声明多个对象时,静态的数据成员依然只在全局区保留了一份,不再像其他的数据成员一样占用对象的空间。
  4.static成员变量必须在类外面定义,类内仅是声明,且声明必须加static,定义不用加
  5.只有在定义对象时,才为对象的数据成员分配空间,但是只要在类中指定了静态数据成员,即使不定义对象,也会为该静态数据成员分配空间。
  6.静态数据成员在程序开始时被分配空间,到程序结束时释放,即生命周期是整个工程。 

class Date
{
    static int count;//静态成员变量
private:
    int _year;
    int _month;
    int _day;
public:
    Date()
    {
        cout << "Date()" << endl;
        ++count;
    }
    void Show()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }
};
int Date::count=0;//在类外定义,因为静态成员属于类,所以不用调用对象,直接调用类

static类成员、static类函数

2.static成员函数

  作用:主要用来访问静态数据成员
  1.是类的一部分,而不是对象的一部分,和静态数据成员一样。所以静态函数无this指针。
  2.无this指针,所以静态成员函数不能访问非static成员变量,只能访问static成员变量
  3.公用的成员函数可以引用对象的非静态数据成员,也可以访问类中的静态数据成员
  

class Date
{
private:
    int _year;
    int _month;
    int _day;
public:
    Date()
    {
        cout << "Date()" << endl;
        ++count;
    }
    void Show()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }
    static void PrintCount()//静态成员函数(无this指针,不属于对象,可以通过类直接调用)所以static不能调用非static成员
    {
        cout << "PrintCount: " << count << endl;
        //cout << _year << endl; //试图访问非static数据成员,error
    }
    static int count;//静态成员变量
};

int Date::count = 0;

void Test()
{
    Date d1, d2;
    Date::PrintCount();
}