程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> C++學習摘要之二:構造函數和析構函數

C++學習摘要之二:構造函數和析構函數

編輯:vc教程

構造函數和析構函數是類的兩個特殊的成員函數

1.構造函數

構造函數(constructor)是類的一個特殊的成員函數,它與類名同名。當定義該類的對象時,構造函數將被系統自動調用用以實現對該對象的初始化。

構造函數不能有返回值,因而不能指定包括void在內的任何返回值類型。

構造函數的定義與其他成員函數的定義一樣可以放在類內或類外。

構造函數的定義格式為:

類名(形參說明)

{函數體}

構造函數既可以定義成有參函數,也可以定義成無參函數,要根據問題的需要來定。

注意:程序中不能直接調用構造函數,構造函數是在創建對象時由系統直接調用的,因此,在構造函數中一般完成初始化類成員變量的操作。

2.構造函數的重載

一個類中出現了兩個以上的同名的成員函數時,稱為類的成員函數的重載。

在類的成員函數的重載中,比較常見形式是構造函數的重載,當類中出現了重載構造函數時,C++語言將根據構造函數中的參數個數和類型選擇合適的構造函數來完成對象的構造。

3.默認構造函數與缺省參數的構造函數

如果在類中沒有顯示定義構造函數,則編譯系統會為該類提供一個默認的構造函數,該默認構造函數是一個無參函數,函數體為空,它僅僅負責創建對象,而不做任何初始化工作(即不給相應的數據成員賦初值),所以在該類的對象創建時不能保證有一個確定的初始狀態。

良好的編程習慣應該是給類提供合適的完成初始化工作的構造函數。

但是,只要一個類定義了一個構造函數(不一定是無參構造函數),編譯系統就不再提供默認的構造函數。

當構造函數具有缺省參數時,稱為具有缺省參數的構造函數,在使用具有缺省參數的構造函數時,要防止二義性。

4.拷貝構造函數

拷貝構造函數是一種特殊的構造函數。定義拷貝構造函數的一般格式為:

類名::類名(const 類名 &形式參數)

{ 函數體 }

拷貝構造函數的函數名與類名同名。該函數也沒有返回值。

拷貝構造函數的功能是通過將一個同類對象的值拷貝給一個新對象,來完成對新對象的初始化,即用一個對象去構造另外一個對象。

如果在類的定義中沒有定義拷貝構造函數,則編譯系統將自動生成一個具有上述形式的默認的拷貝構造函數,作為該類的公有成員。

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