一、構造函數的引入 數據成員的初始化 類的數據成員不能在類定義時初始化 公有數據成員可以在定義對象時初始化 用成員函數初始化 C++提供了構造函數來處理對象的數據成員的初始化 二、帶參數的構造函數 不帶參數的構造函數使該類的每一個對象得到同一組初值 帶參數的構造函數可以給不同的對象賦以不同的初值 構造函數的一般格式 構造函數名(類型1 形參1,類型2 形參2 ,…) 類名 對象名(實參1,實參2,…) 三、構造函數的重載 建立對象時選用無參構造函數,定義方法 Box box1; 盡管在一個類中可以包含多個構造函數,但是對于每一個對象來說,建立對象時只執行其中一個構造函數,并非每個構造函數都執行 四、使用默認參數的構造函數 應該在聲明構造函數時指定默認參數 聲明構造函數時,形參名可以省略 如果構造函數的全部參數都指定了默認參數,則在定義對象時可以給一個或幾個實參,也可以不給實參 不指定實參,相當于所有參數都使用默認值,因此,也可以稱為默認構造函數 因為一個類只能有一個默認構造函數,因此不能同時再聲明無參的默認構造函數 Box() 五、使用默認參數的構造函數 在一個類中定義了全部是默認參數的構造函數后,不能再定義重載構造函數 如果構造函數中的參數并非全部默認時,要分析具體情況 一般構造函數的重載和有默認參數的構造函數不同時使用 六、析構函數 析構函數也是一個特殊的成員函數,它的作用與構造函數相反,它的名字是類名前加位取反運算符”~” 析構函數不返回任何值,沒有函數類型,也沒有函數參數 由于沒有函數參數,因此它不能被重載,一個類可以有多個構造函數,但只能有一個析構函數 只要對象的生命周期結束,程序會自動執行析構函數 析構函數的作用不是刪除對象,而是在撤銷對象占用的內存之前完成一些清理工作,使這部分內存可以被程序分配給新對象使用 析構函數可以完成設計者所指定的任何操作 如果用戶沒有定義析構函數,C++編譯系統會自動生成一個析構函數,但這個析構函數只是有析構函數的名稱和形式,實際上什么操作都不執行 下列情況下,程序執行析構函數 函數中的自動局部對象,在函數調用結束時,對象應該釋放,在對象釋放前自動執行析構函數 函數中的static局部對象, 在函數調用結束時不釋放對象,因此也不調用析構函數,只有在main函數結束或exit函數結束程序時,才調用static局部對象的析構函數 如果定義了一個全局對象,則在程序流程離開其作用域時,調用該全局對象的析構函數 如果用new運算符動態地建立了一個對象,當用delete運算符釋放該對象時,先調用該對象的析構函數
新聞熱點
疑難解答
圖片精選