一、类成员的初始化
众所周知,在类内的成员,一般只声明,并不会在声明的时候初始化。类内初始化会报错普通成员类内初始化
初始化报错
什么变量可以在类内初始化呢?
答:静态常量成员,即static const静态常量成员可以类内初始化
总结:
①静态常量数据成员 static const 可以在类内初始化,也可以在类外,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化.
②静态非常量数据成员 static 只能在类外,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化
普通康娜年龄可以随意赋值,不彳亍,静态常量的康娜年龄永远只有5岁,彳亍!
二、普通类static成员的初始化
static成员需要在类外进行初始化,而不能在使用的时候直接赋值
报错
类外初始化类外初始化
成功输出
为什么static要类外初始化?
答:因为static成员是属于整个类,而不是属于一个对象,不管你用类实例化多少个对象,static成员的值永远都是一样的。
如下图,你使用Dragon类实例化出来三个对象,分别是露科亚,托尔,还有康娜,然后露科亚对kangNa进行了赋值,托尔也对kangNa进行了赋值,然而最终输出的是6,即最后一个所赋的值。这就说明了static成员是属于整个类的,而不会因为实例化了多个对象而导致每个对象都有不同的static成员。康娜
输出
三、类模板的static成员初始化
初始化时记得带template类模板static成员初始化
实例化对象
输出
可以看到,模板类的static成员变量存在两个值,为什么?
答:因为static成员变量并不属于模板类,之前也说过了,模板类会进行两次编译,只有在指定了具体的类型后,static变量才算初始化,而且这里相当于生成了两个类,一个int类型,一个char类型,自然就会有两个static。
怎么样,是不是很简单呢!