C++static 数据成员

本文详细介绍了C++中静态成员变量的使用方式,包括其声明、初始化及定义等关键概念,并解释了与普通成员变量的不同之处。

static 数据成员可以声明为任意类型,可以是常量、引用、数组、类类型,等等。

static 数据成员必须在类定义体的外部定义(类的内部为声明)。不像普通数据成员,static 成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化。

定义 static 数据成员的方式与定义其他类成员和变量的方式相同:先指定类型名,接着是成员的完全限定名。

一般而言,类的 static 成员,像普通数据成员一样,不能在类的定义体中初始化。相反,static 数据成员通常在定义时才初始化。这个规则的一个例外是,只要初始化式是一个常量表达式, const static 数据成员就可以在类的定义时进行初始化。

 

### C++ Static 数据成员的定义与用法 #### 静态数据成员概述 在C++中,`static`关键字可以应用于类的数据成员。静态数据成员属于整个类而非某个特定的对象实例[^2]。这意味着无论创建多少个该类的对象,静态数据成员都只存在一份副本。 #### 声明与定义 静态数据成员需要先在类内部声明,再在类外部定义并初始化。例如,在下面的例子中展示了如何声明和定义一个名为 `num` 的静态整型变量: ```cpp class Test { public: // 声明静态数据成员 static int num; }; // 定义并初始化静态数据成员 int Test::num = 100; ``` 上述代码片段表明,尽管我们在类外完成了实际分配内存的操作,但在类内仍然保留了对该成员的声明以便其他部分程序能够识别其存在[^3]。 #### 访问方式 可以通过两种途径来访问静态数据成员:通过对象或者直接通过类名加上作用域解析运算符(`::`)。需要注意的是即使使用对象去访问它实际上还是共享同一份存储空间并不会因为不同对象而有所区别。 ```cpp #include <iostream> using namespace std; class Test { public: static int num; }; int Test::num = 100; int main(){ Test t; // 使用对象访问静态成员 cout << t.num << endl; // 使用类名访问静态成员 cout << Test::num << endl; } ``` 以上例子说明无论是通过具体实例`t`还是类别名称`Test`,最终输出的结果都是相同的数值即初始设定好的值100. #### 存储特性 由于所有的对象共用同一个静态数据成员,因此当任何一个地方修改这个值的时候其余所有关联的地方都会受到影响. #### 初始化注意事项 对于非整形类型的静态常量成员(如字符串),它们必须被显式地初始化于全局区域之外的位置上;而对于基本类型来说如果是在头文件里边做默认赋初值的话则不需要再次单独指定一次具体的数值除非想要改变原先预设的内容.[^2] ```cpp class Example{ private: static const double PI;//仅需声明即可 }; const double Example::PI=3.14159265358979323846;//确切位置不重要只要确保唯一性就行 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值