Static const和static const

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

  • const 定義的常量在超出其作用域之后,其空間便會(huì)被釋放收回.C++11之后const成員變量可以在類(lèi)內(nèi)定義處初始化,或者通過(guò)構(gòu)造函數(shù)的初始化列表執(zhí)行
  • 而static定義的靜態(tài)常量在函數(shù)執(zhí)行之后不會(huì)被釋放其存儲(chǔ)空間.static定義的靜態(tài)成員變量不能在類(lèi)內(nèi)初始化.定義必須在類(lèi)外執(zhí)行 ,且在定義時(shí)前不加static,防止與一般的靜態(tài)變量混淆
class foo
{
public:
    foo();
private:
    static int i;
};
int foo::i=20;
  • static const 與 const static作用一樣,可以直接在類(lèi)內(nèi)定義處直接初始化也可以在類(lèi)外初始化
  • static 定義的靜態(tài)成員函數(shù)與靜態(tài)成員變量一樣,都屬于類(lèi)的靜態(tài)成員而不是對(duì)象成員,因此對(duì)靜態(tài)成員的引用不需要類(lèi)定義的對(duì)象名,可以直接通過(guò)::來(lái)引用,其與普通成員函數(shù)的區(qū)別在于其沒(méi)有this指針,而且只能訪(fǎng)問(wèn)靜態(tài)成員變量
//完整例子
#include <iostream>
using namespace std;
class Box
{
   public:
      static int objectCount;
      // 構(gòu)造函數(shù)定義
      Box(double a=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
         // 每次創(chuàng)建對(duì)象時(shí)增加 1
         objectCount++;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      static int getCount()
      {
         return objectCount;
      }
    static const int a = 9;  //類(lèi)內(nèi)定義
   private:
      double length = 2.0;     // 長(zhǎng)度
      double breadth;    // 寬度
      double height;     // 高度

};
// 初始化類(lèi) Box 的靜態(tài)成員
int Box::objectCount = 0;
int main(void)
{
  // 在創(chuàng)建對(duì)象之前輸出對(duì)象的總數(shù)
   cout << "Inital Stage Count: " << Box::getCount() << endl;
   Box Box1( 1.2, 1.5);    // 聲明 box1
   Box Box2( 6.0, 2.0);    // 聲明 box2
  // 在創(chuàng)建對(duì)象之后輸出對(duì)象的總數(shù)
   cout << "Final Stage Count: " << Box::getCount() << endl;  //并不用對(duì)象引用,輸出為2;
   cout << "hhy" << Box1.Volume() << endl;
   cout << "hhhy" << Box::a << endl;  //輸出為9
   return 0;
}

通過(guò)使用靜態(tài)成員變量和靜態(tài)成員函數(shù)使得類(lèi)的所有對(duì)象都能共享,可以有效的節(jié)省內(nèi)存.對(duì)多個(gè)類(lèi)的對(duì)象而言,靜態(tài)數(shù)據(jù)成員只存儲(chǔ)一處.其值是可以更新的,只要對(duì)靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對(duì)象存取更新后相同的值.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,679評(píng)論 1 51
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,663評(píng)論 1 32
  • C++文件 例:從文件income. in中讀入收入直到文件結(jié)束,并將收入和稅金輸出到文件tax. out。 檢查...
    SeanC52111閱讀 3,103評(píng)論 0 3
  • 幾種語(yǔ)言的特性 匯編程序:將匯編語(yǔ)言源程序翻譯成目標(biāo)程序編譯程序:將高級(jí)語(yǔ)言源程序翻譯成目標(biāo)程序解釋程序:將高級(jí)語(yǔ)...
    囊螢映雪的螢閱讀 3,064評(píng)論 1 5
  • 1 我叫周小媚,十年前經(jīng)人介紹認(rèn)識(shí)了老公劉宏偉,盡管他木訥油膩的樣子從一開(kāi)始起我就不喜歡,無(wú)法想象和他一起滾床單的...
    夢(mèng)的衣裳TY閱讀 9,343評(píng)論 175 263

友情鏈接更多精彩內(nèi)容