Static const和static const

static,const和static const 以及它们的初始化

  • const 定义的常量在超出其作用域之后,其空间便会被释放收回.C++11之后const成员变量可以在类内定义处初始化,或者通过构造函数的初始化列表执行
  • 而static定义的静态常量在函数执行之后不会被释放其存储空间.static定义的静态成员变量不能在类内初始化.定义必须在类外执行 ,且在定义时前不加static,防止与一般的静态变量混淆
class foo
{
public:
    foo();
private:
    static int i;
};
int foo::i=20;
  • static const 与 const static作用一样,可以直接在类内定义处直接初始化也可以在类外初始化
  • static 定义的静态成员函数与静态成员变量一样,都属于类的静态成员而不是对象成员,因此对静态成员的引用不需要类定义的对象名,可以直接通过::来引用,其与普通成员函数的区别在于其没有this指针,而且只能访问静态成员变量
//完整例子
#include 
using namespace std;
class Box
{
   public:
      static int objectCount;
      // 构造函数定义
      Box(double a=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
         // 每次创建对象时增加 1
         objectCount++;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      static int getCount()
      {
         return objectCount;
      }
    static const int a = 9;  //类内定义
   private:
      double length = 2.0;     // 长度
      double breadth;    // 宽度
      double height;     // 高度

};
// 初始化类 Box 的静态成员
int Box::objectCount = 0;
int main(void)
{
  // 在创建对象之前输出对象的总数
   cout << "Inital Stage Count: " << Box::getCount() << endl;
   Box Box1( 1.2, 1.5);    // 声明 box1
   Box Box2( 6.0, 2.0);    // 声明 box2
  // 在创建对象之后输出对象的总数
   cout << "Final Stage Count: " << Box::getCount() << endl;  //并不用对象引用,输出为2;
   cout << "hhy" << Box1.Volume() << endl;
   cout << "hhhy" << Box::a << endl;  //输出为9
   return 0;
}

通过使用静态成员变量和静态成员函数使得类的所有对象都能共享,可以有效的节省内存.对多个类的对象而言,静态数据成员只存储一处.其值是可以更新的,只要对静态数据成员的值更新一次,保证所有对象存取更新后相同的值.

你可能感兴趣的:(Static const和static const)