大堆隻能進行從小到大的排序,小堆隻能進行從大到小的排序。
1.構造函數:
- 構造函數是一個特殊的成員函數,名字與類名相同,建立類類型對象時由編譯器自動調用,保證每個資料成員都有一個合适的初始值,并且在對象的生命周期内隻調用一次。
- 構造函數是特殊的成員函數,需要注意的是,構造函數的雖然名稱叫構造,但是需要注意的是構造函數的主要任務并不是開空間建立對象,而是初始化對象。
特征:
- 函數名與類名相同。
- 無傳回值。
- 對象執行個體化時編譯器自動調用對應的構造函數。
- 構造函數可以重載。
一但顯式定義了有參構造函數,那麼構造無參構造函數也需要自己顯式給出,一但顯式定義了拷貝構造函數,那麼其他函數也需要顯式給出。
2.析構函數:
析構函數是特殊的成員函數。
析構函數:與構造函數功能相反,析構函數不是完成對象的銷毀,局部對象銷毀工作是由編譯器完成的。而對象在銷毀時會自動調用析構函數,完成類的一些資源清理工作。
- 析構函數名是在類名前加上字元 ~。
- 無參數無傳回值。
- 一個類有且隻有一個析構函數。若未顯式定義,系統會自動生成預設的析構函數。
- 對象生命周期結束時,C++編譯系統系統自動調用析構函數。析構函數不可以重載
3.拷貝構造函數:
構造函數:隻有單個形參,該形參是對本類類型對象的引用(一般常用const修飾),在用已存在的類類型對象建立新對象時由編譯器自動調用。
- 拷貝構造函數是構造函數的一個重載形式。
- 拷貝構造函數的參數隻有一個且必須使用引用傳參,使用傳值方式會引發無窮遞歸調用。
- 若未顯示定義,系統生成預設的拷貝構造函數。 預設的拷貝構造函數對象按記憶體存儲按位元組序完成拷貝,這種拷貝我們叫做淺拷貝,或者值拷貝。
4.運算符重載
- 不能通過連接配接其他符号來建立新的操作符:比如operator@ 重載操作符必須有一個類類型或者枚舉類型的操作數
- 用于内置類型的操作符,其含義不能改變,例如:内置的整型+,不能改變其含義
- 作為類成員的重載函數時,其形參看起來比操作數數目少1成員函數的 操作符有一個預設的形參this,限定為第一個形參
- .* 、::、sizeof 、?: 、. 注意以上5個運算符不能重載。這個經常在筆試選擇題中出現。
- 當在類内進行函數重載的時候,還有一個this指針,預設在第一個參數的位置。
當我們在進行重載的時候,加入将運算符重載定義成全局的函數,那麼如果要通路類内的成員變量,就需要類内的成員變量是公有的,那麼封裝特性又該怎麼辦?其實我們可以将他們設定為類内的函數,或者使用全局函數做友元(好基友當然可以随便通路了)。
5.【c++】必須在類初始化清單中初始化的幾種情況
- 類成員為const類型
- 類成員為引用類型
- 類成員為沒有預設構造函數的類類型(有顯式的拷貝構造,那麼類就不會提供無參構造函數和有參構造函數,這個時候假如類内的成員是類類型的成員,這時候就必須在初始化清單的位置初始化)
- 如果類存在繼承關系,派生類必須在其初始化清單中調用基類的構造函數
6.const成員的調用
1.const類型對象隻能調用const類型的函數
2.非const類型對象可以調用非const類型的函數和const類型的函數
3.const類型成員函數隻能調用const類型的函數
4.非const類型成員函數可以調用非const類型的函數,和const類型的函數。