C++ --- 静态成员变量/函数

一.为什么要有静态成员变量?

        全局变量的值为各个函数所共享,各处都可以自由地修改全局变量的值,(全局变量的安全性得不到保证)很有可能失误,从而导致程序错误。

        所以为了防止成员变量被随意修改,所以把它设置成静态成员变量来保护它。

二.使用方法

class test
{
private:
    static int v;		//定义类的静态成员变量

public:

    static int getValue()	//定义类的静态成员函数
    {
        return v;
    }
};

int test::v = 2024;		//类的静态成员变量需要在类外初始化
int main()
{
    test t;
    cout << t.getValue();
}

 特备注意:在初始化静态成员变量的时候要在类外面进行。

三.访问方法

存在两种访问方法:

1.因为它是类的一部分,而不是对象的一部分,所以可以通过类找到它

2.用类来定义一个对象之后,静态成员变量和静态成员函数也属于对象,所以,也允许通过对象名调用静态成员函数。

class test
{
private:
    static int v;		
public:
    static int getValue()	
    {
        return v;
    }
};

int test::v = 2024;		
int main()
{
    test t;
    cout<<test::getValue()<<endl;      //直接使用类名+::调用
    cout<<t.getValue()<<endl;          //使用对象+. 调用
}

四.它为什么没有this指针(静态成员函数)

        通常调用一个对象的成员函数时(非静态成员函数),系统会把该对象的起始地址赋值给函数的this指针。但是静态成员函数它不属于某一个对象,所以它就没有this指针。

1.静态成员函数无法直接访问非静态成员变量(要想访问需要指定对象)。

2.非静态成员函数可以直接访问静态成员变量。

五.初始化时间(静态成员变量)

        在编译的时候进行初始化。

 编译时初始化的好处:

1.在源代码被编译过程中,编译期会加入代码逻辑,以完成确定的内存分配和变量的初始化。分配内存,并非实际分配内存,而是写入其内存分配大小信息。

2.在编译期初始化,那么在实际运行期都是确定的结构和逻辑,将带来更高的性能,因为编译器完成了一定的工作。

 六.内存分配

1.静态成员变量是在所有对象之外单独开辟空间,在一个类中有一个或多个静态成员变量,所有的对象共享这些静态成员变量,都可以引用它。

2.它不随对象的建立而分配空间,也不随对象的撤销而释放。静态成员变量是在程序编译的时候分配空间,直到程序结束才释放空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值