當類的例項進入作用域時,即物件被建立,則就會呼叫建構函式。建構函式的作用是:建立乙個物件時,建構函式可以對這個物件進行初始化。
建構函式名和類名相同。
建構函式沒有返回值。
建構函式可以在類內和類外定義。
建構函式可以過載。
建構函式在物件被建立時自動呼叫。
成員初始化列表,格式為:類名::類名(形參表):內嵌物件1(形參表),內嵌物件2(形參表)…
// person.**件
#pragma once
class
person
;// person。cpp檔案
person::
person
(short age ,
char
* name)
:age
(age)
,name
(name)
// main.cpp 檔案
#include
#include
"person.h"
intmain()
賦值方式,格式為:類名::類名(形參表)
// person.**件
#pragma once
class
person
;// person.cpp檔案
#include
"person.h"
person::
person
(short age ,
char
* name)
// main.cpp檔案
#include
#include
"person.h"
intmain()
兩種寫法的區別1
:方法一應該叫作初始化,方法二應該叫作賦值。二者是有本質的區別的。c++規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。因此方法二的建構函式內屬性不能算是被初始化,是被賦值了。初始化發生的時間更早,發生在這些成員的default建構函式被自動呼叫之時。使用方法二的建構函式需要執行兩次copy構造。因此理論上使用方法一的成員初始化列表(member initialization list)方式的效率更高,因為比起先呼叫default建構函式然後再呼叫copy assignment操作符,單隻呼叫一次copy建構函式是比較高效的。
當需要儲存物件的副本,以便在後面執行過程中恢復物件的原始狀態,則可以使用複製建構函式實現。複製建構函式就是函式的引數是乙個已經初始化的類物件。因為比較簡單,直接上示例:
// person.h 檔案
#pragma once
class
person
;// person.cpp 檔案
#include
"person.h"
person::
person
(short age ,
char
* name)
person::
person
(person& copyperson)
// main.cpp 檔案
#include
#include
"person.h"
intmain()
節選自《effective c++》 ↩︎ 關於建構函式的總結
前言 建構函式可以分為 1 不帶預設引數的建構函式,也叫做預設建構函式,如果自己不寫,編譯器會自動生成 2 帶有預設引數的建構函式,如果未指定引數,則需要的引數被初始化為預設值 3 拷貝建構函式 預設建構函式 多數情況下,編譯器為類生成乙個公有的預設建構函式,只有下面兩種情況特殊 1 乙個類顯示地宣...
關於建構函式 複製建構函式與析構函式的總結
建構函式 建構函式的作用 1 建立物件 2 初始化其值 建構函式所具有的的特性 1 建構函式的函式名與類名相同 2 沒有返回值 建構函式的執行順序 1 傳參 2 按照類中成員變數宣告順序,依次構造其成員 3 執行建構函式的函式體 建構函式有兩種過載形式 1 帶有引數的 2 無引數的,即預設建構函式 ...
關於建構函式的預設構造
拷貝建構函式 是用於當乙個 使用者自定義型別的物件 作為函式引數時,系統預設 的拷貝建構函式 不能達到目地,這時需要用到 使用者自己定義 的拷貝建構函式 通常是 類的私有成員裡有起到重要作用的指標變數 當進行函式引數的 值傳遞 時,系統會呼叫 拷貝建構函式 如果沒有 自定義 拷貝建構函式 則系統會呼...