程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ static不同的應用方式

C++ static不同的應用方式

編輯:C++入門知識

C++編程語言的應用方式和其他語言特別是C語言有很多不同之處。那麼今天大家就可以從C++ static的應用方法來分析一下它的不同之處到底體現在哪裡。同時又能讓大家進一步掌握C++語言的編程方法。

C++ static具體應用方式代碼示例:

  1. public class C {   
  2. public static void M() {   
  3. Console.WriteLine("call in class C");   
  4. }   
  5. }  
  6. public class D : C {   
  7. public new static void M() {   
  8. Console.WriteLine("call in class D");   
  9. }   
  10. }  
  11. public class E<T> where T : C {   
  12. public static void N() {   
  13. T.M();   
  14. }   

代碼是錯誤的,不允許一個instance來call一個static method。如果你編譯的話,會提示:

  1. Error 2 'T' is a 'type parameter', 
    which is not valid in the given context 

為什麼?從語言設計的角度來看,針對上面的代碼,下面的三種情況只能有一種為true。

  • C++堆對象如何禁用
  • C++棧對象產生禁用方式
  • C++仿函數基本概念淺析
  • C++可變參數表基本內容探討
  • 各個C++內存區域功能對比

1. 本身就是錯誤的寫法

2. E.N() calls C.M() no matter what T is.

3. E.N() calls C.M() but E.N() calls D.M().

如果按照2設計,會有用戶期望當T是class D的時候,執行class D的method M,而不是C。Static之所以是static,因為它在編譯時刻就可以被確切的determined,或者說,在靜態代碼分析階段,這個方法就可以被確定了。所以,如果按照3的方式來設計,我們就違背了這個原則。這樣,只有1了。

另外的解釋:

1. virtual static,為什麼沒這個東西?

2. 沒有this指針而已以上內容轉自同事的一個blog,做了簡單的修改)

不過,不清楚C++裡面為什麼允許這麼做?

  1. public class Test{  
  2. public static void Say(){}  
  3. }  
  4. Test t;  
  5. Test* t2 = new Test();  
  6. t.Say();  
  7. t2->Say(); 

以上就是對C++ static的相關應用方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved