mysql小技巧--group_concat
阿新 • • 發佈:2021-02-02
技術標籤:靜態成員量和靜態成員函式c++類
C++靜態成員變數和靜態成員函式使用
靜態成員變數:
類中的資料成員宣告前加static關鍵字,該資料成員就成為了類的靜態資料成員。
1、靜態資料成員定義
靜態資料成員實際是類域中的全域性變數,靜態資料成員的初始化不應該在標頭檔案中。
在.h中宣告,在.cpp中初始化
不要在標頭檔案中初始化靜態資料成員,在大多數的情況下,在標頭檔案中初始化靜態資料成員會引起重複定義。及時加上#ifdef #define #endif 或者 #pragma once也不行。
2、靜態資料成員被類的所有物件共享,包括類的派生類的物件。 派生類物件與基類物件共享基類的靜態資料成員。
class base { public: static int _num; // 宣告 }; int base::_num = 0; // 靜態資料成員的真正定義 class derived : public base { }; #include <iostream> int main() { base a; derived b; a._num++; std::cout << "base class static data number _numis: " << a._num << std::endl; b._num++; std::cout << "derived class static data number _numis: " << b._num << std::endl; return 0; }
3、靜態資料成員可以成為成員函式的可選引數,而普通資料成員則不可以。
class base {
public:
static int _staticVar;
int var;
void foo1(int i = _staticVar); // 正確,_staticVar為靜態資料成員
void foo2(int i = _var); // 錯誤,_var為普通資料成員
};
3、靜態資料成員的型別可以是所屬類的型別,普通資料成員則不可以。普通資料成員只能宣告為所屬類型別的 指標或者引用
class base { public: static base _object1; // 正確,靜態資料成員 base _object2; // 錯誤 base *pObject; // 正確, 指標 base &mObject; // 正確, 引用 };
靜態成員函式:
1、靜態成員函式的地址可用普通函式指標儲存,普通成員函式地址需要用類的成員函式指標來儲存;
2、靜態成員函式不可以呼叫類的非靜態成員。因為靜態成員函式不含this指標;
3、靜態成員函式不可以同時宣告為virtual、const、volatile函式
class base{
virtual static void func1(); //錯誤
static void func2() const; //錯誤
static void func3() volatile; //錯誤
};
小結:
靜態成員是可以獨立訪問的,也就是說,無須建立任何物件例項就可以訪問。
靜態函式不包含隱藏的this指標,它在類沒有例項化的時候就存在,可以直接用(類名::函式)呼叫;它只能使用類沒有例項化前就存在的靜態變數