c 運算子過載以及一些基本概念

2021-06-26 02:40:09 字數 1823 閱讀 9455

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 一些基本概念

建構函式的作用是對物件本身做初始化工作,也就是給使用者提供初始化類中成員變數的一種方式。析構函式是釋放物件執行期間所申請的資源。函式的過載,過載構成的條件 函式的引數型別不同 引數個數不同,才能構成函式的過載 在乙個類中 注意,只有函式的返回型別不同是不能構成函式的過載。在函式過載時,要注意函式帶有...