类的static静态成员

静态成员

类的静态成员在定义的时候,需要先加上一个static。虽然在类体内定义,可以被对象改变,但它不属于某个对象,甚至可以脱离对象单独存在,属于整个类体,(就是上交给国家的感觉)。分为静态数据成员和静态成员函数两种。

静态数据成员

静态数据成员在类体内声明,但在类体外初始化,且必须初始化。初始化的格式为:静态变量类型 类名::赋值语句

class Date
{
public:
    static int a;//声明a
};
int Date::a=6;//初始化a

构造函数可以改变静态成员的值,但不能用于初始化,也就是说,类体外的初始化语句是必须要有的。如果有多个静态成员变量,需要挨个初始化,而不能用逗号链接。

class Date
{
public:
    static int a,b;
    Date(){a=5;}
};
int Date::a=0;//如果任何一个静态变量没初始化,程序会报错
int Date::b=0;//a和b要各自初始化,不可连在一起
//int Date::a=0,b=0;这样写是错的
int main()
{
    Date t;
    cout<<t.a;
    return 0;
}

输出:

5

静态成员不属于任何对象,可以不依赖对象,用类名::变量直接输出。

class Date
{
public:
    static int a;
};
int Date::a=0;
int main()
{
    cout<<Date::a<<endl;
    return 0;
}

输出:

0

应用实例

静态成员变量不受对象限制,单独存在,故可以用于记录对象个数

class Date{
private:
    static int num;
public:
    Date(){
        num++;
    }//每当用无参构造函数定义一个对象,num就会+1
};
int Date::num=0;//初始化num=0
int main()
{
    Date d1,d2,d3;//num=3
    return 0;
}

静态成员函数

静态成员函数只能访问静态成员变量/其他静态成员函数,可以在类体内实现(内联函数),也可以在类体内声明,在类体外实现(外联函数)。静态成员函数像静态数据成员一样没有对象类名::函数名直接调用

class Date
{
public:
    static int a;
    static int plus(){
        return a*a;//内联的静态成员函数
    }
};
int Date::a=4;
int main()
{
    cout<<Date::plus()<<endl;//不依赖对象的调用
    Date d;
    cout<<d.plus();//也可以用任意一个对象调用
    return 0;
}

输出结果:

16
16

本人是在读大学生,系列教程主要为了便于我的同学们参考,其中可能有很多不妥之处,望各位大佬雅正。
公众号:网织青春zcwlgc2019

猜你喜欢

转载自blog.csdn.net/pyx2466079565/article/details/106173995