2 回答

TA貢獻1775條經驗 獲得超11個贊
為什么要用靜態成員函數?
從上述修改中可以看出,不使用靜態成員函數顯然也能實現相同的功能,那么,為什么要使用靜態成員函數呢?
如果把average函數定義為非靜態成員函數,那么主函數中將出現stud[1](當然,換成stud[0]或者stud[2]也可以),stud[1]的出現破壞了主函數中語句的邏輯性。他人在閱讀主函數時看到stud[1]也許會有疑問:這里為什么要用stud[1]的成員函數,有什么特殊含義嗎?是不是this指針必須在指向stud[1]的時候才能求得正確的平均值?降低了主函數的可讀性。
靜態成員函數主要是用來處理靜態數據成員的,而靜態數據成員不只屬于某一個對象,它是為“全部同類對象”所共用的。因此,定義靜態成員函數的目的在于處理“全部同類對象”的共同問題。
靜態成員函數不屬于某一個特定的對象,因為把一個處理“全部同類對象”共同問題的函數定義為某個對象所有是不合邏輯的。靜態成員函數直接使用類名和域運算符調用,提高了語句的邏輯性和可讀性。
樓上認為,使用靜態成員函數的原因在于,不論有沒有定義對象,靜態成員函數都可以直接被調用。這的確是靜態成員函數的一個特點,但是把它作為使用靜態成員函數的原因未免有些牽強。試想,在沒有定義對象的情況下,調用靜態成員函數又有什么意義呢?
也許有人會說,在沒有定義對象的情況下,靜態成員函數還可以對靜態數據成員進行操作啊。是的,的確可以,可是靜態數據成員又是為誰而設的呢?沒有定義對象,數據成員也變的沒有意義了。
綜上,靜態成員函數的使用,提高了語句的邏輯性和可讀性。

TA貢獻1735條經驗 獲得超5個贊
代碼就不寫了 直接解釋你的問題吧,
average函數如果不設置為靜態成員函數,那么你需要實例化一個class Student對象去調用average函數
class Stu=new Student();
Stu.average(); 之類的。
簡單的說就是如果函數不是靜態的,那么當創建一個對象的時候,這個對象的函數才創建,這也就是為什么需要對象實例化才能去調用一個非靜態函數了。
如果使用靜態成員函數,就無需創建對象去訪問,即使這樣是可行的(JAVA里這樣,C++呢?),因為不管對象創建與否,靜態成員函數總是能夠被訪問。
添加回答
舉報