★15.关于类静态数据成员

静态数据成员的定义

普通类

头文件

class Base{
    static const int max_size = 10;   // 可以直接在此处定义,也可以在实现文件中定义
    static int size;                  // 不可以直接在此处定义,必须在实现文件中定义
};

实现文件

int Base::size = 0;                   // 无需带有static关键字

模板类

头文件

class A {
};

template 
class Base {
    static const int max_size = 10;   // 可以直接在此处定义,也可以在实现文件中定义
    static int size;                  // 不可以直接在此处定义,必须在实现文件中定义
};

// 方式一:普通
template 
int Base::size = 10;

// 方式二:特化
template <>
int Base::size = 10;

静态成员的实例可能有多个

  • 一个类中的静态数据成员通常只有一个实例,无论有多少这个类的对象,但以下两种情况下会有多个静态数据成员实例:
    • 这个类被继承时,继承这个类的派生类会产生一份静态数据成员实例。
    • 这个类被内嵌于其他类时,也会再产生一份静态数据成员实例。(嵌套类还是被用作别的类的数据成员?)
    • 解决方案:将默认构造函数声明为私有,或者使用C++11的= delete语法,来阻止被继承和被内嵌

静态成员的两种调用方式

  • 通过类名::静态成员名
  • 通过对象.静态成员名

你可能感兴趣的:(★15.关于类静态数据成员)