C++类静态成员变量、静态成员函数

本文详细阐述了C++中静态成员变量的特点(共享、初始化、访问方式),以及静态成员函数的特性(共享函数、访问限制)。特别强调了静态成员函数由于缺乏this指针,只能访问静态成员变量。
摘要由CSDN通过智能技术生成

静态成员变量

static + 成员变量 = 静态成员变量

class Person{
    int m_age;               //普通成员变量
    static int m_birthday;   //静态成员变量
};

特点

1、所有对象共享同一份数据

2、在类内声明,一定要在类外初始化

3、可以通过类名直接访问

        用  类名::变量名  的方式就可以直接访问静态成员变量

4、在编译阶段分配内存

5、存储在内存中的全局区

class Person{
public:
    static int m_age;   //静态成员变量
};

int Person::m_age = 18;   //一定要初始化,不然会报错

Person p1;   //创建对象p1
cout << p1.m_age << endl;   //输出p1的年龄 18

Person p2;   //创建对象p2
p2.m_age = 22;   //将p2的年龄改为 22

cout << p1.m_age << endl;   //输出p1的年龄 22 因为所有对象共享同一数据

访问方式

1、通过对象进行访问

2、通过类名进行访问

ps:普通成员变量只能通过对象进行访问

class Person{
    int m_age;               //非静态成员变量
    static int m_birthday;   //静态成员变量
};

int Person::m_birthday = 1030;   //类外初始化

//1、通过对象访问
Person p1;
p1.m_age = 22;   //非静态成员变量 只能通过对象访问
p1.m_birthday = 0202;   //访问,修改值

//2、通过类名访问
cout << Person::m_birthday << endl;   //访问,打印

静态成员函数

static + 成员函数 = 静态成员函数

class Person{
    void func_1(){ }          //普通成员函数
    static void func_2(){ }   //静态成员函数
};
特点

1、程序共享一个函数

2、静态成员函数,只能访问静态成员变量

class Person{
public:
    static void func(){
        m_age = 22;   //这行代码会报错,静态成员函数 只能访问 静态成员变量
        m_birthday = 0202;
    }

    int m_age;               //普通成员变量
    static int m_birthday;   //静态成员变量
};

int Person::m_birthday = 1030;   //类外初始化

解释,为什么只能访问静态成员变量:

如果你知道 this指针 的话,那就很好理解,原因就是静态成员函数没有 this指针

比如上面的代码,假如我创建2个对象:Person p1,p2;

当调用静态成员函数时:p1.func( ); p2.func( );

编译器不知道其中的 普通成员变量 m_age 到底是属于p1的还是p2的,因为没有 this指针

但是 m_birthday 就不会有这个问题,因为静态成员变量只有一份数据,不用考虑属于谁

访问方式

1、通过对象访问

2、通过类名访问

class Person{
public:
    void func_1(){   //普通成员函数
        ...
    }
    static void func_2(){   //静态成员函数
       ...
    }
};

//1、通过对象访问
Person p1;
p1.func_1();   //普通成员函数 只能 通过对象访问
p1.func_2();

//2、通过类名访问
Person::func();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值