C++ 之 静态成员

 

用关键字static声明的类成员。对于静态成员变量,无论创建了多少个类对象,程序都只创建一份静态成员变量,所有的对象共享类的静态成员变量。


静态数据成员是静态存储的,静态成员变量在使用前必须初始化! 不能在类声明种初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。

需要在类声明之外,使用单独的语句来进行初始化。初始化语句需要指出类型,并使用域操作符,前面不加static。不管静态成员变量是public,private,还是protected都可以直接进行初始化:  类型  <类名>::<静态成员名> = xxx

初始化需在cpp文件中进行,这是因为 如果在头文件中进行初始化,该头文件可能被多个其他文件包含,导致重复初始化,导致错误!


静态成员变量的访问:

如果是public类型,则可以直接 className::变量名 , 如果是privaite或protected,则这种方法不能编译通过,需要单独定义个public类型函数来访问,如下面的例子中的getNum成员函数。


例子:
 

#include <iostream>
using namespace std;

class test
{
public:
    test(int a=0);
    ~test();

    void printNum(test obj);

    int a;

    int getNum()
    {
        return num; //通过公有成员函数来访问私有静态成员变量
    }
private:
    static int num;
};
int test::num = 9; //在类外进行初始化!!

int main()
{

    test obj;
   
    int c = obj.getNum();

    getchar();
    return 0;
}

其他:

静态成员函数中不能使用非静态成员。

类的非静态成员函数可以调用用静态成员函数,因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。

类的对象可以直接使用public类型的静态成员函数,例如 objName.func();


Ref:

《c++ primer plus,第五版》-12.1.1

《程序员面试宝典》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

First Snowflakes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值