靜態成員:在定義前面加了static關鍵詞的成員。函數
class A { public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b; } ~A(){ } void Fun(); // 普通成員函數 static void PrintNum() // 靜態成員函數 { // 在靜態成員函數中,不能訪問非靜態成員變量,也不能調用非靜態成員函數 std::cout << num << std::endl; } private: int m_a; // 普通成員變量 int m_b; // 普通成員變量 static int num; // 靜態成員變量 }; // 靜態成員必須在定義類的文件中對靜態成員變量進行初始化,不然會編譯出錯。 int A::num = 0; int main() { A a1(1,1); A::PrintNum(); // 訪問靜態函數 A a2(1,1); A::PrintNum(); // 訪問靜態函數 return 0; }
輸出結果指針
2 4
這裏須要注意的是sizeof
運算符不會計算靜態成員變量的大小,以下栗子:code
class CTest { int n; static int s; };
則sizeof(CTest)
等於4對象
A::PrintNum();
A a; a.PrintNum();
A *p = new A(); p->PrintNum();
A a; A & ref = a; ref.PrintNum();