靜態變量 使用static 來定義變量,可以被全局的類使用,不需要聲明就能調用,屬於類成員,不屬於對象成員
#include <iostream> using namespace std; class A{ public: //普通成員變量在構造時定義和初始化 A(int data = 0):m_data(data){} int m_data; static int s_data; //不屬於對象的一部分 //static const int ci = 0; }; //靜態成員變量需要在類的外部單獨定義 int A::s_data = 20; int main(void) { A a(10); cout << "sizeof(a):" << sizeof(a) << endl; //普通成員變量必須通過對象訪問 cout << a.m_data << endl; //10 //靜態成員變量可以通過"類名::"直接訪問 cout << A::s_data << endl; //20 ok //靜態成員變量也可以通過對象訪問 cout << a.s_data << endl; //20 ok A a2(10); a2.m_data = 11; a2.s_data = 22; cout << a.m_data << endl; //10 cout << a.s_data << endl; //22 return 0; }
靜態函數 使用static定義靜態函數,靜態函數只能調用靜態變量,且靜態函數只能在該文件中使用
#include <iostream> using namespace std; class A{ public: //普通成員變量在構造時定義和初始化 A(int data = 0):m_data(data){} void func1(void){ cout << "非靜態成員函數" << endl; cout << s_data << endl; } static void func2(void){ cout << "靜態成員函數" << endl; //cout << m_data << endl; cout << s_data << endl; } int m_data; static int s_data; //不屬於對象的一部分 //static const int ci = 0; }; //靜態成員變量需要在類的外部單獨定義 int A::s_data = 20; int main(void) { A a(10); a.func1(); A::func2(); return 0; }