1. 程式人生 > >c++建構函式和解構函式的區別?

c++建構函式和解構函式的區別?

建構函式:
什麼是建構函式?通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立一個物件時,作某些初始化的工作(例如對資料賦予初值)。C++允許同名函式,也就允許在一個類中有多個建構函式。如果一個都沒有,編譯器將為該類產生一個預設的建構函式。
建構函式上惟一的語法限制是它不能指定返回型別,甚至void 也不行。
不帶引數的建構函式:一般形式為 類名 物件名(){函式體}
帶引數的建構函式:不帶引數的建構函式,只能以固定不變的值初始化物件。帶引數建構函式的初始化要靈活的多,通過傳遞給建構函式的引數,可以賦予物件不同的初始值。一般形式為:建構函式名(形參表);
建立物件使用時:類名 物件名(實參表);

建構函式引數的初始值:建構函式的引數可以有預設值。當定義物件時,如果不給出引數,就自動把相應的預設引數值賦給物件。一般形式為:
建構函式名(引數=預設值,引數=預設值,……);

解構函式:
當一個類的物件離開作用域時,解構函式將被呼叫(系統自動呼叫)。解構函式的名字和類名一樣,不過要在前面加上 ~ 。對一個類來說,只能允許一個解構函式,解構函式不能有引數,並且也沒有返回值。解構函式的作用是完成一個清理工作,如釋放從堆中分配的記憶體。
一個類中可以有多個建構函式,但解構函式只能有一個。物件被析構的順序,與其建立時的順序相反,即後構造的物件先析構。

相關推薦

c++建構函式和解函式區別

建構函式:什麼是建構函式?通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立一個物件時,作某些初始化的工作(例如對資料賦予初值)。C++允許同名函式,也就允許在一個類中有多個建構函式。如果一個都沒有,編譯器將為該類產生一個預設的建構函式。建構函式上惟一的

C++學習--建構函式和解函式

建構函式是對物件進行初始化的成員函式,建構函式的名字和類的名字是一樣的,建構函式不用特定的呼叫,是在類例項化中,自動呼叫。建構函式可以有多個,也就是可以進行建構函式過載,例項化過程中會根據建構函式的引數型別、個數進行呼叫。解構函式和建構函式相反,是完成一些清理工作,比如釋放記憶體或者其他的工作。解構

C++建構函式和解函式什麼情況下會用

解構函式: 1. 物件生命週期結束,被銷燬時; 2. delete 指向物件的指標時; 3. delete 指向基類物件的指標時,其解構函式是虛擬函式; 4. 在巢狀關係中,物件A是物件B的成員,當物件B執行解構函式時,物件A的解構函式也會被呼叫; 建構函式: 1.  在宣告一個普通物件

派生類的建構函式和解函式C++學習筆記 32)

  引入繼承的目的:①派生類繼承了基類的成員,實現了原有程式碼的重用。②實現程式碼的擴充,只有在派生類中通過新增新的成員,加入新的功能,類的派生才有實際意義。   基類的建構函式和解構函式不能被繼承,在派生類中,如果對派生類新增的成員進行初始化,就需要加入派生類的建構函式,同時,對所有從基類

提高C++效能的程式設計技術筆記:建構函式和解函式+測試程式碼

物件的建立和銷燬往往會造成效能的損失。在繼承層次中,物件的建立將引起其先輩的建立。物件的銷燬也是如此。其次,物件相關的開銷與物件本身的派生鏈的長度和複雜性相關。所建立的物件(以及其後銷燬的物件)的數量與派生的複雜度成正比。 並不是說繼承根本上就是程式碼效能的絆腳石。我們必須區分全部計算開銷、

C++中的建構函式和解函式

1:建構函式 處理物件的初始化。特殊的成員函式,不需要使用者來呼叫,而是在建立物件的時候自動執行。 特點: ①與類名相同 ②沒有任何返回型別 ③定義時可以有引數,可以無引數 2:解構函式 語法 :~cl

C++中 建構函式和解函式能不能被顯示呼叫

                程式碼: view plaincopy to clipboardprint?#include <iostream>   using namespace std;     class A   {   public:       A()       {         

C++進階--建構函式和解函式中的虛擬函式

//############################################################################ /* 任何時候都不要在建構函式或解構函式中呼叫虛擬函式 */ class dog { public: string m_name

C++建構函式和解函式--從常見的面試題說起系列1

class A { public:     A(){a=0}     virtual ~A(){printf "aaa";}} private:     int a; } class B: public A { public:     B(){a=2

C#—建構函式和解函式

一、前言        作為比C更先進的語言,C#提供了更好的機制來增強程式的安全性,C#編譯器具有嚴格的型別安全檢查功能,它幾乎能找出程式中所有的語法問題,但是程式通過了編譯檢查並不表示錯誤已經不存在了,不少難以察覺的程式錯誤是由於變數沒有被正確初始化或清除造成的,而初

C++ 建構函式和解函式與virtual關鍵字

一、建構函式 1.建構函式任何時候都不可以宣告為虛擬函式,原因如下:1)虛擬函式的呼叫軍需通過虛擬函式表vtable來呼叫,虛擬函式表是儲存在記憶體空間的,在呼叫建構函式前,物件還未被實力化,也就沒有

C++知識點10:建構函式和解函式

建構函式: 生成物件時呼叫建構函式 生成派生類物件時先呼叫基類建構函式在呼叫派生類建構函式 #include <iostream> using namespace std; class base { public: base(){

C++中建構函式和解函式丟擲異常問題

一. 丟擲異常 1.1 丟擲異常(也稱為拋棄異常)即檢測是否產生異常,在C++中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異常。 該語句的格式為: throw 表示式; 如果在try語句塊的程式段中(包括在其中呼叫的函式)發現了異常,且拋棄了

C++派生類的建構函式和解函式執行順序及其構造形式

    在C++程式設計師的面試中,經常會出現派生類與基類的建構函式、解構函式的執行順序。其實這是一個很基本的問題,沒有什麼難度,只需要記住就OK了。      1.派生類的建構函式和解構函式的執行順序     首先執行基類的建構函式,隨後執行派生類的建構函式,當撤銷派生類物件時,限執行派生類的解構函

C++】類的六大預設的成員函式 之 解函式以及建構函式和解函式的呼叫順序

                                              解構函式 一.解構函式定義               解構函式也是特殊的成員函式,他的作用和建構函式相反。 class Box { public: //建構函式 Box(i

c++中,類 和 類中成員(物件)的建構函式和解函式的執行順序

#include <iostream> using namespace std; class b{ public: b(){ cout<<"b gou zao han shu"<<endl; } ~b(){ cout<

C++習題——橢圓類(拷貝建構函式和解函式

Description(1)拷貝(複製)建構函式的實現。在上一題(橢圓類——1)的基礎上,增加一個拷貝建構函式。函式原型格式:Ellipse(const Ellipse & e);(2)增加Show()函式,顯示橢圓的外切矩形的頂點座標。(3)增加一個成員函式Fun(

c++之建構函式和解函式

1、  建構函式: (1)定義: 1)C++中的類可以定義與類名相同的特殊成員函式,這種與類名相同的成員函式叫做建構函式; 2)建構函式在定義時可以有引數; 3)沒有任何返回型別的宣告。 (2)呼叫: 自動呼叫:一般情況下C++編譯器會自動呼叫建構函式 手動呼叫:在一些情況

C++)C++類繼承中的建構函式和解函式

#include <iostream> using namespace std; class Shape{ public: void Draw() {cout<<"Base::Draw()"<<endl;} void Erase() {co

C++繼承中建構函式和解函式的呼叫順序

class Fish:public Animal { public: Fish() { cout<<"this is Fish"<<endl; } ~Fish() { cout<<"this is free Fish"<<en