c++primer第四版435
1.賦值( = ), 下標( [ ] ) ,呼叫 ( ( ) ), 成員訪問箭頭 (->)等操作符必須定義為成員,定義為非成員時,編譯器報錯
2. 像賦值一樣,符合賦值操作符通常應定義為類的成員,但是定義為非成員的復合賦值操作符時不會出現編譯錯誤
3.改變物件狀態或給定型別緊密聯絡的其他一些操作符,如自增,自減和解引用,通常應定義為類的成員
4.對稱操作,如算術操作符,相等操作符,關係操作符和位操作符,最好定義為普通的非成員函式
不能過載的操作符:
基本注意問題:
1.成員變數的初始化順序只與在宣告時的順序一樣,和初始化列表中的順序無關
2.必須在初始化列表中初始化的情況: 沒有預設建構函式的類型別的成員
const型別成員 和 引用型別的成員變數
-->const 型別成員會呼叫拷貝建構函式 而引用型別不會呼叫拷貝建構函式
class b;
class a
a(int a):a_(a)
a(const a &s)
private:
int a_;
};class b : public a
void prin()
private:
// a a1_;
a &a2_;
const a a3_;
};int main(int argc, const char *argv)
- ->友元類,能訪問到a類的私有成員
3.c++的兩種初始化方式:1.直接初始化:呼叫建構函式
2.複製初始化:使用=號操作符,會呼叫到拷貝建構函式
4.當函式形參或者返回值為類型別時,將由複製建構函式進行複製
a a1;
fun(a ); --->呼叫fun(a)會呼叫拷貝建構函式,當然最後也會呼叫析構函式的
5.拷貝建構函式為引用的原因:防止無限呼叫拷貝建構函式下去,拷貝建構函式傳形參值時會呼叫型別的拷貝建構函式,這樣無窮下去
6.深拷貝 淺拷貝 :淺拷貝:對資料成員進行簡單的賦值 深拷貝:對於物件中的動態成員,不能簡單的賦值,而應該重新動態分配空間
7.空間 c++物件:先呼叫基類建構函式,在初始化列表上成員,再呼叫自己的建構函式 -->析構的時候反過來
8. 過載 覆蓋 隱藏的概念
9. 轉換建構函式和型別 轉換函式的區別, 型別轉換函式注意的幾點:1.成員函式, 2.不能指定返回型別, 3.不能有引數 -->operator int() -->函式裡面要return 乙個相同型別的出來
10.多型性:靜態多型性(過載(操作符, 函式)) 動態多型性:虛函式
11.:使用指標訪問非虛函式:訪問指標的型別的,
使用指標訪問虛函式時:訪問指標所指物件的型別
---> 引用也是類似的,不過引用一經宣告不能改變了
12.觸發動態繫結的條件:1.虛函式才能執行動態繫結 2.必須通過基類型別的指標或者引用進行函式呼叫
13.建構函式不能為虛函式:虛函式實在不同型別的物件產生不同的動作,現在物件還沒產生,沒有虛函式指標,訪問不到虛函式。
13.動態執行時型別識別(rtti):typeid 返回指標或者引用所指物件的實際型別
dynamic_cast 將基類的指標或引用安全的轉換成派生型別的指標或引用
14.顯式轉換:reinterpret_cast 強制型別轉換-- >類似於c的型別轉換
const_cast 轉換掉const屬性或者加上const屬性
static_cast 隱式型別轉換,可以自動轉換的
dynamic_cast 主要用於有虛函式的下行轉換
C 運算子過載的基本概念
c 預定義的運算子,只能用於基本資料型別的運算 整型 實型 字元型 邏輯型等等,且不能用於物件的運算。但是我們有時候又很需要在物件之間能用運算子,那麼這時我們就要過載運算子,使得運算子能用於物件之間的運算。比如,在數學上,兩個複數可以直接進行 等運算,但在c 中,直接將 或 用於複數物件是不允許的。...
11 運算子過載的基本概念
c 預定義的運算子,只能用於基本資料型別的運算 整型,實型,字元型,邏輯型。不能用於物件的運算,有時候又需要物件之間的運算。在數學上,兩個符數可以直接進行 等運算。但是在c 中,直接將 或者 用於複數物件是不允許的。有時候希望,讓物件也能通過運算子進行計算。這樣 更加簡介,更加易於理解。例如 com...
C 一些基本概念
建構函式的作用是對物件本身做初始化工作,也就是給使用者提供初始化類中成員變數的一種方式。析構函式是釋放物件執行期間所申請的資源。函式的過載,過載構成的條件 函式的引數型別不同 引數個數不同,才能構成函式的過載 在乙個類中 注意,只有函式的返回型別不同是不能構成函式的過載。在函式過載時,要注意函式帶有...