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

如何更好的進行C++構造函數

編輯:C++入門知識

構造函數是開發過程中的一種特殊的方法,其主要用來在創建對象時的初始化對象,也就是對象成員變量賦初始值,在C++中進行C++構造函數時,無論什麼時候,只要創建類或結構,就會調用它的構造函數

但是程序通過了編譯檢查並不表示錯誤已經不存在了,在“錯誤”的大家庭裡,“語法錯誤”的地位只能算是小弟弟。級別高的錯誤通常隱藏得很深,就象狡猾的罪犯,想逮住他可不容易。

根據經驗,不少難以察覺的程序錯誤是由於變量沒有被正確初始化或清除造成的,而初始化和清除工作很容易被人遺忘。Stroustrup在設計C++語言時充分考慮了這個問題並很好地予以解決:把對象的初始化工作放在C++構造函數中,把清除工作放在析構函數中。當對象被創建時,構造函數被自動執行。當對象消亡時,析構函數被自動執行。這下就不用擔心忘了對象的初始化和清除工作。

構造函數與析構函數的名字不能隨便起,必須讓編譯器認得出才可以被自動執行。Stroustrup的命名方法既簡單又合理:讓構造函數、析構函數與類同名,由於析構函數的目的與構造函數的相反,就加前綴‘~’以示區別。

除了名字外,構造函數與析構函數的另一個特別之處是沒有返回值類型,這與返回值類型為void的函數不同。C++構造函數與析構函數的使命非常明確,就象出生與死亡,光溜溜地來光溜溜地去。如果它們有返回值類型,那麼編譯器將不知所措。為了防止節外生枝,干脆規定沒有返回值類型。以上典故參考了文獻[Eekel, p55-p56])

C++構造函數有個特殊的初始化方式叫“初始化表達式表”簡稱初始化表)。初始化表位於函數參數表之後,卻在函數體 {} 之前。這說明該表裡的初始化工作發生在函數體內的任何代碼被執行之前。

構造函數初始化表的使用規則:

如果類存在繼承關系,派生類必須在其初始化表裡調用基類的構造函數

例如:

  1. class F  
  2.  
  3. {  
  4.  
  5. public:  
  6.  
  7. F(int x, int y); // 構造函數  
  8.  
  9. private:  
  10.  
  11. int m_x, m_y;  
  12.  
  13. int m_i, m_j;  
  14.  

類的數據成員的初始化可以采用初始化表或函數體內賦值兩種方式,這兩種方式的效率不完全相同,非內部數據類型的成員對象應當采用第一種方式初始化,以獲取更高的效率。

  1. C與C++中標准輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

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