static静态成员变量和静态成员函数

静态成员变量的特性:
1.属于类,不属于某个具体对象,因此不创建对象也可以访问。
2.内存分配在静态区,所有对象共用这份内存,到程序结束时才释放。

静态成员变量的定义(初始化):
1.初始化格式 type class::name = value;
2.需要在类的外部且在代码块之外定义。
3.private的静态成员变量,也一样在类的外部初始化,因为初始化不受存取权限的束缚。

#include <iostream>

using namespace std;

class Demo
{
public:
    static int num;

    Demo()
    {
        cout << "调用构造函数" << endl;
    }
};

// 静态程艳变量的初始化
int Demo::num = 180;
// 可以不赋值,静态区数据默认为零
// int Demo::num;

int main(int argc, char *argv[])
{
    Demo demo;
    cout << "类访问   num is:" << Demo::num << endl;
    cout << "对象访问 num is:" << demo.num << endl;
    return 1;
}

输出:
调用构造函数
类访问   num is180
对象访问 num is180

静态成员函数的特性:
1.属于类,不属于某个具体对象,因此不创建对象也可以访问。
2.存放在代码区,所有对象共享一个副本。
3.静态成员函数与普通成员函数的根本区别在于:普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。

静态成员函数的定义:
1.在类外定义静态成员函数不需要static关键字。

#include <iostream>

using namespace std;

class Demo
{
public:
    static int num;
    int i;

    Demo()
    {
        cout << "调用构造函数" << endl;
    }

    static void printNum()
    {
        cout << "打印num:" << num << endl;
    }
};

// 静态程艳变量的初始化
int Demo::num = 180;

int main(int argc, char *argv[])
{
    Demo demo;
    Demo::printNum();
    return 1;
}

输出:
调用构造函数
打印num:180

 

posted @ 2023-05-18 12:28  jason8826  阅读(61)  评论(0)    收藏  举报