java 模板类 静态变量_[C++]STL 模板(四)类模板&普通类中static成员的初始化及区别...

一、类成员的初始化

众所周知,在类内的成员,一般只声明,并不会在声明的时候初始化。类内初始化会报错364a2bbb8d5a4fc18c9e21c4143eb2a6.png普通成员类内初始化

0a0ec7a894ceed9e8e51d38be9ab112a.png初始化报错

什么变量可以在类内初始化呢?

答:静态常量成员,即static const4ff42b37662ca7635cb9d3cf07c7960e.png静态常量成员可以类内初始化

总结:

①静态常量数据成员 static const 可以在类内初始化,也可以在类外,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化.

②静态非常量数据成员 static 只能在类外,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化

普通康娜年龄可以随意赋值,不彳亍,静态常量的康娜年龄永远只有5岁,彳亍!c1b66da4dbe9701d9cb46369916966a6.png

二、普通类static成员的初始化

static成员需要在类外进行初始化,而不能在使用的时候直接赋值f2b022736e672bde365fc2328bed9300.png

6ddcfc6017f326bbfeefd3a020774ff6.png报错

类外初始化9070b83859d2416eb685f146b351ac72.png类外初始化

f4b7de33ef69f7b5b1f64fbf69127a5d.png成功输出

为什么static要类外初始化?

答:因为static成员是属于整个类,而不是属于一个对象,不管你用类实例化多少个对象,static成员的值永远都是一样的。

如下图,你使用Dragon类实例化出来三个对象,分别是露科亚,托尔,还有康娜,然后露科亚对kangNa进行了赋值,托尔也对kangNa进行了赋值,然而最终输出的是6,即最后一个所赋的值。这就说明了static成员是属于整个类的,而不会因为实例化了多个对象而导致每个对象都有不同的static成员。f4f68b7c7989785469f0b5cb92c4e786.png康娜

2508f5c86f1aa90b6beb269827a549fc.png

9b0b8dfb75dddf4dbabe39047c69d99a.png输出

三、类模板的static成员初始化

初始化时记得带templated34f0e28a45ced4e011d31d673f3872e.png类模板static成员初始化

实例化对象3c60d66dd450ac19401ef7f2ac315448.png

7d6833b44a0fa44aef1281810a6e28e7.png输出

可以看到,模板类的static成员变量存在两个值,为什么?

答:因为static成员变量并不属于模板类,之前也说过了,模板类会进行两次编译,只有在指定了具体的类型后,static变量才算初始化,而且这里相当于生成了两个类,一个int类型,一个char类型,自然就会有两个static。

怎么样,是不是很简单呢!adc756b0b27fd5a4edffcc3c456eb6d9.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值