委託建構函式 析構函式

2021-10-02 11:19:18 字數 2059 閱讀 8050

回顧clock類的兩個建構函式:

//建構函式的實現:

clock

(int newh,

int newm,

int news)

:hour

(newh)

,minute

(newm)

,second

(news)

//預設建構函式實現

clock::

clock()

:hour(0

),minute(0

),second(0

)

這兩個建構函式 類似 做同一件事情!!

使用委託建構函式 簡化**

clock

(int newh,

int newm,

int news)

:hour

(newh)

,minute

(newm)

,second

(news)

clock()

:clock(0

,0,0

)// 委託建構函式

-複製建構函式是一種特殊的建構函式,其形參類為本類的物件引用。

作用是用乙個已經存在的物件去初始化同型別新物件。

class  類名 

;類名 :: 類(

const 類名 &物件名 )

;//複製建構函式的 實現

1.定義乙個物件是,以本類另乙個物件作為初始值,發生複製構造;

2.如果函式的形參是類的物件,呼叫函式時,將使用實參物件初始化形參物件,發生複製構造;

3.如果函式的返回值是類的物件,執行完返回主調函式時,將使用return語句的物件初始化乙個臨時無名物件,傳遞給主調函式,此時發生複製構造。

-這種情況也可以通過移動構造避免不必要的複製

如果程式設計師沒有為類宣告拷貝初始化建構函式,則編譯器自己生成乙個隱含的建構函式。

這個建構函式執行的功能是:用初始值物件的每乙個資料成員,初始化將要建立的物件的對應資料成員。

如果不希望物件被複製構造

-c++98做法: 將復置否早函式宣告為 private,並且不提狗函式的實現

-c++11做法:==用「=delete」指示編譯器不生成預設複製建構函式。==

例如:

class

//建構函式,內聯

point

(const point& p)

=delete

;//指示編譯器不生成預設建構函式

private

:int x,y;

//私有資料

}

#include

using

namespace std;

class

point

;//成員函式的實現

point::

point

(const point &p)

//形參為point類物件的函式

void

fun1

(point p)

point fun2()

int main

完成物件被刪除前的一些清理工作。

在物件的生存期結束的時刻系統自動呼叫它,然後再釋放此物件所屬的空間。

如果程式中未宣告析構函式,編譯器將自動產生乙個預設的析構函式,其函式體為空。

建構函式和析構函式舉例

#include

using

namespace std;

class

point

;//析構函式的實現

point::

point

(int xx,

int yy)

point::

~point()

//...其他函式的實現

建構函式 析構函式 虛析構函式

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

建構函式 析構函式

是在物件被建立時自動呼叫的函式,將物件初始化為乙個特定的狀態 建構函式的形式 c 11中可以用clock default 來生成預設建構函式 是指類的物件在建立的時候,能使用已有的物件之間初始化它。或者是在類的物件在作為函式形參的時候,或者類的物件在作為函式返回值的時候 作為複製的機制需要自動拷貝型...

析構函式 建構函式

建構函式 一般用於物件的初始化 函式原型 例宣告乙個cperson類 成員變數即成員方法的宣告暫且不加,下同 則其預設生成建構函式原型為 cperson 即必須與類名相同 建構函式特點及使用法則 特點 1.建構函式無返回值 2.函式可以過載 使用者可以自行更改建構函式中的引數,以實現自定義的初始化形...