回顧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.函式可以過載 使用者可以自行更改建構函式中的引數,以實現自定義的初始化形...