就是再成員函數 定義前加一個 static
我們需要了解它的訪問方式以及訪問權限,以及一些特點
有個博主總結的好
傳送門;https://blog.csdn.net/qq_25800311/article/details/85146173
一、靜態成員的特點:
(1)static數據成員在類的內部聲明,但只能在類的外部定義,在類的外部不能指定static,在類的定義時候進行初始化;
(2)static數據成員只能在類的外部進行初始化(特例:當整型const static數據成員被常量表達式初始化時,就可以在類的內部進行初始化,但還需要在外部進行定義)。
(3) static數據成員可以是該成員所屬的類類型,而非static數據成員只能自身類的引用或者指針。
(4)static數據成員可以用作類成員函數的默認實參。
(5)static數據成員的值可以改變。
二、靜態成員和非靜態成員的區別:
(1) 靜態變量使用 static 修飾符進行聲明,在類被實例化時創建,通過類和對象都可以進行訪問;
(2)不帶有 static 修飾符聲明的變量稱做非靜態變量,在對象被實例化時創建,通過對象訪問;
(3) 一個類的所有實例的同一靜態變量都是同一個值,同一個類的不同實例的同一非靜態變量可以是不同的值。
(4) 靜態函數的實現里不能使用非靜態成員,如非靜態變量、非靜態函數等。
三、靜態成員函數的特點:
(1) static 成員函數沒有 this 形參,它可以訪問所屬類的 static 成員,但不能訪問非 static 成員。
(2)static成員函數既可以在類的內部定義,也可以在類的外部定義,在外部定義時,不能重復指定static保留字。
(3)static成員函數不能聲明為虛函數,不能實現動態綁定
(4)static 成員函數不能聲明為const,因為const是針對this是不是const而言的
(5)構造函數、析構函數不能為靜態函數。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 class person 5 { 6 public: 7 static void fun() 8 { 9 age = 30; 10 //no = 100;可行靜態成員函數只能訪問靜態成員變量 11 puts("static void fun()的調用"); 12 } 13 static int age; 14 int no; 15 private: 16 static void func()//這個private在類外不可被訪問到 17 { 18 puts("static void func()的調用"); 19 } 20 }; 21 22 int person::age = 20;//在類的外部定義 23 24 void test() 25 { 26 person::fun();//通過類名訪問 27 person p; 28 p.fun();//通過對象訪問 29 } 30 int main() 31 { 32 33 test(); 34 return 0; 35 }