靜態成員函數


就是再成員函數 定義前加一個 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM