C++静态成员变量初始化

静态成员变量初始化

       静态成员变量可以初始化,但只能在类体外进行初始化。如:

long long student::number = 13926572996;    //在类体外对静态成员变量赋值

其一般形式为:

数据类型 类名::静态成员变量名 = 初值;

不必在初始化赋值语句中加 static。

       注意:不可以在构造函数的参数初始化表中对静态成员变量初始化,例如:

    student(char* pn, char* pa, int n):number(n)

    {

        strcpy(name, pn);

        strcpy(addr, pa);

    }

       在构造函数中,对static类型的number成员进行初始化,是错误的操作。

如果未对静态成员变量赋值,则编译系统会自动赋初值为0。

如果一个成员变量定义为const类型,同时,也是static类型,那么,应该怎么样初始化?有如下的分析:

(1) static类型的成员变量,需要在类外进行初始化;

(2) const类型的成员变量,需要在构造函数的初始化列表进行初始化;

       那么,const类型的static成员变量,不可以在构造函数的初始化列表中进行初始化,例如:

       程序编译错误,如下:

       提示 student::number成员变量是static类型,仅仅在定义的时候可以初始化。所以,不可以在构造函数列表中初始化。所以,在类外对static类型的成员变量进行初始化,程序测试代码如下:

       程序运行结果如下:

       所以,可以在类外对const类型的静态成员变量进行初始化。

       注意:对于const 类型的static成员变量,可以在定义它的时候进行初始化,如下:

       在student类内对number成员进行初始化。这是合法的语句。

韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

  • 6
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++中,静态成员变量初始化通常需要在类的定义外进行。以下是一种常见的初始化方法: ```cpp // 在类的定义中声明静态成员变量 class MyClass { public: static int myStaticVariable; }; // 在类的定义外进行初始化 int MyClass::myStaticVariable = 0; ``` 在上面的示例中,我们在类的定义内声明了一个静态成员变量 `myStaticVariable`,然后在类的定义外用 `MyClass::` 来指定作用域,进行初始化赋值。 请注意,在C++11之前,如果静态成员变量是一种非整数类型(例如类对象),则需要在类的定义外调用其构造函数进行初始化。 ```cpp class MyClass { public: static std::string myStaticString; }; std::string MyClass::myStaticString = "Hello, World!"; // C++11之前的写法 ``` 从C++11开始,还可以通过在类的定义内使用静态成员变量的初始值来进行初始化: ```cpp class MyClass { public: static int myStaticVariable = 42; // C++11以后的写法 }; ``` 这种方法只适用于整数类型的静态成员变量。对于其他类型,仍然需要在类的定义外进行初始化。 需要注意的是,在多个文件中使用静态成员变量时,只能在一个文件中进行定义和初始化,其他文件需要使用 `extern` 关键字来声明该静态成员变量。 ```cpp // MyClass.h class MyClass { public: static int myStaticVariable; }; // MyClass.cpp int MyClass::myStaticVariable = 0; // main.cpp #include "MyClass.h" extern int MyClass::myStaticVariable; ``` 这样就可以在不同的源文件中使用同一个静态成员变量 `myStaticVariable` 了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

韦凯峰Linux编程学堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值