淺談C++ 類(二)

一、定義類相關的非成員函式

淺談C++ 類(二)

add函式,ostream函式,istream函式均屬於輔助函式,在概念是屬於類,但不定義在類中。

Note

:一般來說,如果非成員函式是類介面的組成部分,則這些函式的宣告應該與類在同一個標頭檔案內。

read和print函式說明:

① read和print分別接受一個各自IO型別的引用作為其引數,這是因為IO類屬於不可複製型,只能透過引用來傳遞它們。而且,因為讀取和寫入的操作會改變流的內容,所以兩個函式接受的都是普通引用,而不是常量引用。

② print函式不負責換行。

建構函式

每個類都分別定義了它的物件被初始化的方式,類透過一個或幾個特殊成員函式來控制其物件的初始化過程,這些函式叫做

建構函式

。其任務是初始化類物件的資料成員。

建構函式

① 名字與類名相同

② 建構函式沒有返回型別

③ 有引數列表(可能為空)和一個函式體(可能為空)

④ 類可以包含多個建構函式

⑤ 建構函式不能宣告為const

預設建構函式初始化類資料成員的規則

(如圖):

① 如果存在類內的初始值,用它來初始化成員。

② 否則,預設初始化該成員

淺談C++ 類(二)

某些類不能依賴於合成的預設建構函式

① 只有當類沒有宣告任何建構函式時,編譯器才會自動生成預設建構函式。

一旦我們定義了其他的建構函式,我們需要在定義一個預設的建構函式,否則類將沒有預設建構函式

② 如果類包含有內建型別或者複合型別(如陣列,指標)的成員(因為這些成員不能被預設初始化),只有這些成員全都賦予了類內的初始值時,這個類才能使用合成的預設建構函式。

③ 有時編譯器不能為某些類合成預設的建構函式(後邊介紹無法合成預設建構函式的情況)