隱式的類型別轉換
類的靜態成員
「c++ primer」this
this
總是指向「這個」物件,所以this
是乙個常量指標
常量物件,以及常量物件的引用或指標都只能呼叫常量成員函式
原因:雖然this
是隱式的,但仍然遵守初始化規則,所以不能把this
繫結到乙個常量物件上,所以這就是不能在乙個常量物件上呼叫普通成員函式的原因
const 成員函式
std::string isbn() const
上例中const
的作用是修改隱式this
指標的型別,表示this
是乙個指向常量的指標
訪問控制
使用class
和struct
定義類唯一的區別就是預設的訪問許可權
友元可變資料成員
乙個可變資料成員mutable
永遠不會是const
,即使它是const
物件的成員,因此,乙個const
成員函式可以改變乙個可變成員的值
建構函式初始值列表
委託建構函式
乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程,或者說它把自己的一些(或者全部)職責委託給其他建構函式
class sales_data
// 其餘建構函式全都委託給另乙個建構函式
sales_data() : sales_data("", 0, 0) {}
sales_data(const std::string &s) : sales_data(s, 0, 0) {}
sales_data(std::istream& is):sales_data()
}
預設建構函式
預設初始化
在塊作用域不使用任何初始值定義乙個非靜態變數或者陣列時
當乙個類本身含有類型別成員且使用合成的預設建構函式時
當類型別的成員沒有在建構函式初始值列表中顯示的初始化時
值初始化
當陣列初始化的過程中如果我們踢動的初始值數量少於陣列的大小時
當不使用初始值定義乙個區域性靜態變數時
當書寫形如t()
的表示式顯式的請求初始化時
隱式的類型別轉換
string null_book = "888";
// 接受 string 的建構函式自動建立了乙個臨時的 sales_data 物件,combine 的引數是乙個常量引用所以可以傳遞乙個臨時變數
item.combine(null_book);
explicit
:通過將建構函式宣告為explicit
加以阻止隱式轉化,由於需要多個引數的建構函式無法執行隱式轉換,所以explicit
只對含有乙個實參的建構函式有效
注意:explicit
只允許出現在類內的建構函式宣告處
類的靜態成員
C primer 讀書筆記
第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...
C Primer讀書筆記
前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...
C Primer讀書筆記
前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...