資料成員初始化,函式過載

2021-07-28 06:46:47 字數 2423 閱讀 3326

1.資料成員初始化:

基於物件的程式中,在定義物件時,需要做初始化工作,即對資料成員賦值,類是一種抽象型別,並不佔儲存空間,不能容納資料。如果乙個類中的所有成員都是公用的,則可以在定義物件時對資料成員進行初始化。

建構函式實現資料成員的初始化。不需要使用者呼叫它,而是在建立物件時自動執行。

例如:宣告乙個時間類,實現建構函式對類的資料成員初始化:

#include 

using

namespace

std;

class time //宣告time類

void set_time(); //成員函式宣告

void show_time();

private: //私有資料

int hour;

int min;

int sec;

};void time::set_time() //定義成員函式,向成員函式賦值

void time::show_time() //定義成員函式,輸出資料成員的值

2.帶引數的建構函式:

帶參的建構函式中的形參,其對應的實參是在建立物件時給定的,即在建立物件時同時指定資料成員的初值。

定義不同物件時用的實參是不同的,它們反映不同物件的屬性。用這種方法可以方便地實現對不同物件進行不同的初始化。使用起來方便,直觀,從定義語句中可以直接看到資料成員的初值。例如:

#include 

using

namespace

std;

class box

//用引數初始化表對成員資料初始化,與類外定義建構函式初始化效果等價

int volume(); //宣告計算體積的函式

private:

int _height; //類的成員變數,習慣前加"_"或"m_"表示類的成員

int _width;

int _length;

};box::box(int h, int w, int l) //在類外定義帶引數的建構函式

int box::volume() //定義計算體積的函式

int main()

3.引數初始化表

用引數初始化表對資料成員初始化,這種方法不在函式體內對資料成員初始化,而是在函式首部實現,如:box::box(int h, int w, int l) :_height(h), _width(w), _length(l){},即在原來函式首部末尾加冒號,然後列出引數的初始化表,上面初始化表示:用形參h的值初始化資料成員_height,用形參w的值初始化資料成員_width,用形參l的值初始化資料成員_length,後面的花括號是空的,即函式體是空的,沒有任何執行語。用引數初始化表法可以減少函式體的長度,是結構函式顯得精煉簡單。這樣就可以直接在類體中定義建構函式。尤其當需要初始化的資料成員較多時更顯優越性。

類名::建構函式名([參數列])[:成員初始化表]

//其中方括號內為可選項(可有可無)

如果資料成員是陣列,則應當在建構函式的函式體中用語句對其賦值,而不能在引數初始化列表中對其初始化,如:

4.函式過載:

在同乙個作用域類,一組函式的函式名相同,引數列表不同(個數/型別不同),返回值可同可不同。函式過載與返回型別無關,通過引數型別,呼叫不同的函式。

建構函式的過載 在乙個類裡可以定義多個建構函式,以便為物件提供不同的初始化方法,供使用者選用,這些建構函式具有相同的名字,而引數的個數或引數型別可以不同。

#include 

using

namespace

std;

class box

//定義乙個有參的建構函式,用引數的初始化表對資料成員初始化

int volume();

private:

int _height;

int _width;

int _length;

};box::box()

int box::volume()

int main()

成員初始化列表

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...

成員初始化列表

任乙個物件的建立都要呼叫建構函式,而在建構函式中一般要給物件屬性賦值。成員初始化列表 member initialize list 是建構函式中特有的語法,用以簡化對物件屬性的賦值。其用法如下 class myclass 以上 相當於 class myclass 用成員初始化列表的語法來表述很顯然 ...

成員初始化列表

從概念上講,可以認為建構函式分兩個階段執行 1 初始化階段 2 普通的計算階段。計算階段由建構函式函式體中的所有語句組成。不管成員是否在建構函式初始化列表中顯式初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段開始之前。在建構函式初始化列表中沒有顯式提及的每個成員,使用與初始化變數...