C++技術——static、單例模型
阿新 • • 發佈:2018-12-03
一 static成員變數:
生命週期:從定義開始到程序結束,與類關聯,獨立於物件。
儲存:靜態區域性變數,靜態全域性變數都儲存在資料段
static修飾的成員變數---先於類的物件而存在(可以直接通過類名使用--前提成員是公有)
static修飾的成員變數--是被這個類的所有物件共用
static修飾的成員變數要在類外初始化 資料型別 類名::變數名 = 值
二 static成員函式:
static修飾成員函式----先於類的物件而存在(可以直接通過類名使用--前提成員是公有)
static修飾的成員函式---該方法沒有this指標,在該函式中不能操作非static修飾的成員。
三 (好資料轉載,關於static 修飾變數、函式具體知識點講解)點選
四 單例項模式--使用靜態成員變數+靜態成員函式
/* 單例項模型例項:封裝LCD裝置,無論程式在那訪問, 都是通過static LcdDevice* sharedLcdDevice() 來獲取LCD,從而操作LCD。 */ #include <iostream> using namespace std; class LcdDevice //LCD類 { public: static LcdDevice* sharedLcdDevice()//成員方法沒有this指標 { if(instance == NULL)//如果為空則呼叫建構函式, //通常整個程序生命週期,因為instance 是靜態變數只調用一次。 { instance = new LcdDevice(); } return instance; } /*把建構函式和拷貝建構函式設定為私有,為了避免下面這兩種可以成功呼叫 LcdDevice mylcd;(宣告物件) LcdDevice mylcd=*lcd;(拷貝物件) 我們希望整個程式呼叫LCD入口只有LcdDevice* lcd = LcdDevice::sharedLcdDevice(): 這樣保證了我們整個程式操作的是同一個LCD。 */ private: LcdDevice() { //初始化lcd--open, mmap } LcdDevice(LcdDevice& lcd){} public: ~LcdDevice() { //nmap,close } void draw_rect()//畫矩形模組 { cout<<"draw rect"<<endl; } private: int fd; int width, height; unsigned int *mmp; static LcdDevice *instance;//資料段 }; //初始化 LcdDevice *LcdDevice::instance = NULL;//靜態資料初始化----在資料段分配空間 void fun()//子函式想操作LCD,通過這樣的方式,與main() 操作LCD 可以同步. { //繪圖 LcdDevice* lcd = LcdDevice::sharedLcdDevice(); lcd->draw_rect(); } int main(void) { LcdDevice *lcd = LcdDevice::sharedLcdDevice(); lcd->draw_rect(); fun(); //LcdDevice mylcd; 該方式不合適。 //LcdDevice mylcd=*lcd;該方式不合理 }