默認成員函數+運算符重載

1.面向對象程序設計
概念:(Object Oriented Programming,縮寫:OOP)是一種程序設計範型,同時也是一種程序開發的方法。
對象指的是類的實例,將對象作爲程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。
2.面向對象的三大特性:
封裝、繼承、多態
3這裏寫圖片描述
4.三種訪問限定符
這裏寫圖片描述
1. public成員可從類外部直接訪問,private/protected成員不能從類外部直接訪問。
2. 每個限定符在類體中可使用多次,它的作用域是從該限定符出現開始到下一個限定符之前或類體結束前。
3. 類體中如果沒有定義限定符,則默認爲私有的。
4. 類的訪問限定符體現了面向對象的封裝性。
5.類的作用域
1. 每個類都定義了自己的作用域,類的成員(成員函數/成員變量)都在類的這個作用域內,成員函數內可任意訪問成員變量和其它成員
函數。
2. 對象可以通過 . 直接訪問公有成員,指向對象的指針通過 -> 也可以直接訪問對象的公有成員。
3. 在類體外定義成員,需要使用 :: 作用域解析符指明成員屬於哪個類域。
這裏寫圖片描述
6.結構體內存對其規則:
1).第一個成員在與結構體變量偏移量爲0的地址處。
2).其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。
//對齊數 = 編譯器默認的一個對齊數 與 該成員大小的較小值。
VS中默認的值爲8
gcc中的默認值爲4
3).結構體總大小爲最大對齊數(每個成員變量除了第一個成員都有一個對齊數)的整數倍。
4).如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含嵌套結構體
的對齊數)的整數倍
7.默認成員函數及運算符重載
這裏寫圖片描述
1).【構造函數】
成員變量爲私有的,要對它們進行初始化,必須用一個公有成員函數來進行。同時這個函數應該有且僅在定義對象時自動執行一次,這時
調用的函數稱爲構造函數(constructor) 。
構造函數是特殊的成員函數,其特徵如下:
(1). 函數名與類名相同。
(2). 無返回值。
(3). 對象構造(對象實例化)時系統自動調用對應的構造函數。
(4). 構造函數可以重載。
(5). 構造函數可以在類中定義,也可以在類外定義。
(6). 如果類定義中沒有給出構造函數,則C++編譯器自動產生一個缺省的構造函數,但只要我們定義了一個構造函數,系統就不會自動
生成缺省的構造函數。
2).【拷貝構造函數】
創建對象時使用同類對象來進行初始化,這時所用的構造函數稱爲拷貝構造函數(Copy Constructor),拷貝構造函數是特殊的構造函數。
特徵:
(1). 拷貝構造函數其實是一個構造函數的重載。
(2). 拷貝構造函數的參數必須使用引用傳參,使用傳值方式會引發無窮遞歸調用。(思考爲什麼?)
(3). 若未顯示定義,系統會默認缺省的拷貝構造函數。缺省的拷貝構造函數會,依次拷貝類成員進行初始化。
3).【析構函數】
當一個對象的生命週期結束時,C++編譯系統會自動調用一個成員函數,這個特殊的成員函數即析構函數(destructor)
構造函數是特殊的成員函數,其特徵如下:
(1). 析構函數在類名加上字符~。
(2). 析構函數無參數無返回值。
(3). 一個類有且只有一個析構函數。若未顯示定義,系統會自動生成缺省的析構函數。
(4). 對象生命週期結束時,C++編譯系統系統自動調用析構函數。
(5). 注意析構函數體內並不是刪除對象,而是做一些清理工作。(怎麼理解這裏的清理工作?參看下面的EXP0)
7. 無參的構造函數和全缺省值的構造函數都認爲是缺省構造函數,並且缺省的構造函數只能有一個。
4).爲了增強程序的可讀性,C++支持運算符重載。
運算符重載特徵:
(1). operator+ 合法的運算符 構成函數名(重載<運算符的函數名:operator< )。
(2). 重載運算符以後,不能改變運算符的優先級/結合性/操作數個數。
8.this指針
隱含的this指針
1. 每個成員函數都有一個指針形參,它的名字是固定的,稱爲this指針,this指針是隱式的。(構造函數比較特殊,沒有這個隱含this形
參)
2. 編譯器會對成員函數進行處理,在對象調用成員函數時,對象地址作實參傳遞給成員函數的第一個形參this指針。
3. this指針是成員函數隱含指針形參,是編譯器自己處理的,我們不能在成員函數的形參中添加this指針的參數定義,也不能在調用時
顯示傳遞對象的地址給this指針。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章