C++類this指針為空時的幾個誤區


代碼:

 1 class test{
 2     public:
 3     static void f1(){cout<<y<<endl;}
 4     void f2(){cout<<y<<endl;}
 5     void f3(){cout<<x<<endl;}
 6     void f4(int p){cout<<p<<endl;}
 7     int x;
 8     static int y;
 9 };
10 int test::y=1;
11 int main()
12 {
13     test* p=nullptr;
14     p->f1();
15     p->f2();
16     p->f3();
17     p->f4(5);
18     getchar();
19     return 0;
20 }

2.結果:

f1,f2,f4都會調用成功,f3調用失敗。

解釋:

p為null,所以這個類的this指針為null。調用非靜態成員函數時,編譯器會默認把this指針作為第一個參數!

f1本身為靜態成員函數,調用靜態成員變量y,不需要this指針,成功。

f2是普通成員函數,也可以調用靜態成員變量y,不需要this指針,成功。

f3調用了普通成員變量,這時需要this指針了,但this為null,所以相當於調用cout<<null->x<<endl;這顯然錯誤!

f4也不需要this指針,成功。


另外兩個相關知識點:

1、靜態成員函數只能調用靜態成員變量,普通成員函數可以調用靜態成員變量。

2、靜態成員變量要在類內聲明,類外初始化。

 


免責聲明!

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



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