過載繼承多型知識點總結

2021-09-24 13:49:41 字數 4010 閱讀 3371

stl

stl容器的操作:

size() -返回當前容器的元素數量

empty()-判斷容器是否為空

make_size() -返回容器能容納的最大元素數量

begin()返回乙個迭代器,指向第乙個元素

end() 返回乙個迭代器,指向最後乙個元素之後

rbegin() 返回乙個逆向迭代器,指向逆向遍歷的第乙個元素

rend() 返回乙個逆向迭代器,指向逆向迭代器的最後乙個元素

insert(pos,e) 將元素e的拷貝安插與迭代器pos所指的位置

erase(beg,end) 移除beg到end區間內的所有元素

clear() 移除所有元素

map/multimap

count(key) 返回鍵值等於key的元素個數

find(key) 返回鍵值等於key的第乙個元素,找不到返回end

lower_bound(key) 返回鍵值大於等於key的第乙個元素

upper_bound(key) 返回鍵值大於key的第乙個元素

erase(val) 移除所有等於val的元素,返回移除元素個數

erase(pos) 刪除迭代器pos所指位置的元素,無返回值

運算子過載

將運算子看作特殊的函式

定義過載運算子和定義普通的運算子一樣,函式名由關鍵字operator和其後要定義的運算子組成,返回型別:運算結果的型別,參數列:提供參與運算的運算元。

類的成員運算子函式:

this指向的物件被作為運算子的第乙個運算元。

一元運算數函式不需要提供引數,二元運算子提供乙個引數作為右運算元。

非成員運算數函式:

一元運算子要提供乙個類型別地引數,二元運算子需要提供兩個引數分別作為左和右運算元,其中至少乙個引數必須是類型別的

通常宣告為友元,以便訪問私有資料成員

運算子函式只有在類型別的物件參與運算時才起作用,當運算子作用於內建型別的運算物件時,不會改變該運算子原來的含義

也可以像普通函式一樣直接呼叫運算子函式。

只有至少乙個運算元是使用者自定義型別時,才可以呼叫過載的運算子

只有在能使類的**更易讀,使類的物件的操作方式更符合一般習慣時,才過載運算子。

不能濫用運算子的過載

運算子過載不會改變內建型別的表示式中運算子的含義。

不能過載的運算子:||(邏輯或) &&(邏輯與) ,(逗號運算子)

要慎用運算子過載

設計類時,只有運算元是類需要的,且在邏輯上與運算子相關,才適合定義成過載的運算子。

常用運算子:

一元運算子:

自增自減運算子,

字首和字尾形式都會改變物件,不能對常量物件操作,字首形式返回改變後的物件,字尾形式返回改變之前的值。

字尾形式的自增自減比字首形式多了乙個int引數,這個引數在函式中並不使用,只是作為過載運算函式的標記來區分字首和字尾運算。

過載自增和自減運算數時應同時定義字首和字尾。

二元運算子:

賦值運算子:賦值運算子只能用成員函式過載,

復合賦值運算子可以用成員或非成員過載。

對於類型別的引數,如果僅僅只是讀引數的值,而不改變引數,應該用const引用來傳遞。

普通算術運算子,關係運算子,邏輯運算子都不會改變引數,所以以const引用作為引數傳遞方式。

當運算子函式是類的成員函式時,就將其定義為const成員函式。

成員運算子左運算元必須是當前類的物件,左運算元不能進行自動型別轉換。

非成員函式運算子為兩個運算元都提供了轉換的可能性,使用成員函式運算子這樣可以加強運算子和類的密切關係。

如果左運算元是其他類的物件,或希望運算子的兩個運算元都能進行型別轉換,則使用非成員函式過載運算子。

過載輸入》輸出《運算子

用非成員函式過載這兩個運算子。

輸入輸出運算子函式:

istream&operator >>(istream&,type&)

ostream&operator<<(ostream&,type&)

過載賦值運算子

把類的乙個物件賦值給該類的另乙個乙個物件

過載的賦值運算子必須要定義為成員函式。

返回左運算元的引用,與內建型別的賦值運算子一致,復合賦值運算子不是必須用成員函式定義,但一般傾向於定義為成員函式,也返回左運算元的引用。

組合與繼承

將乙個類的物件作為另乙個物件的成員,叫做組合。

繼承在已有類的基礎上繼承得到新型別,這個新型別自動擁有已有類的特性,並可以修改繼承到的特性或者曾加自己的新特性。

繼承:在已有類的基礎上建立新類的過程,

被繼承的已有類稱為基類

繼承得到的新類稱為派生類

派生類可以在被繼承,這樣構成的層次結構稱為繼承層次

結構:class 派生類名:基類名稱

;public 公有繼承

private 私有繼承

protected 保護繼承

不論哪種方式繼承,派生類都不能直接使用基類的私有成員,

在公有派生類中,基類的public成員和protected成員被繼承,分別作為派生類的public成員和protected成員。基類的private成員雖然也被繼承了,但在派生類中是不可見的。

在私有派生類中,基類的punlic成員和protected成員被派生類作為自己的private成員繼承下來。基類的private成員也被繼承下來,但是在派生類中是不可見的。

在c++的繼承機制中,派生類吸收基類中除建構函式與析構函式以外的全部成員。

可以通過派生類中定義同名成員(包括成員函式與資料成員)來遮蔽在派生類中不起作用的部分基類成員。

基類的初始化

在建立派生類物件時用指定引數呼叫基類的建構函式來初始化派生類繼承基類的資料

派生類建構函式宣告

派生類建構函式(變元表):基類(變元表),物件成員1(變元表)…

建構函式執行的順序:基類,物件成員,派生類

派生類建構函式與析構函式使用要注意:

基類的建構函式和析構函式不能被繼承,

如果基類沒有定義建構函式或有無參的建構函式,派生類也可以不用定義建構函式,

如果基類無無參的建構函式,派生類必須定義建構函式,

如果派生類的基類也是派生類,則每個派生類只負責基類的構造

派生類是否定義析構函式與所屬的基類無關。

派生類建構函式的一般形式:

派生類::派生類名(引數總表):基類名(參數列)

賦值相容原則:

派生類的物件可以賦給基類物件,

派生類物件可以初始化基類的引用,

派生類物件的位址可以賦給基類型別的指標

虛函式與多型

過載函式是多型性的一種簡單形式,

虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。

冠以關鍵字virtual的成員函式稱為虛函式。

乙個虛函式,在派生類介面相同的過載函式都保持虛特性,虛函式必須是基類的成員函式,虛函式可以是另乙個類的友元,析構函式可以是虛函式,但建構函式不能是虛函式。

在派生類中過載函式的虛函式要求函式名,返回型別,引數個數,引數型別和順序完全相同

派生類應該從它的基類公有派生,必須首先在基類中定義虛函式派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫,

**一般可以通過基類指標訪問虛函式時才能體現多型性,**乙個虛函式無論被繼承多少次,保持其虛特性。析構函式,內聯成員函式,靜態成員函式不能是虛函式析構函式可以是虛函式,通常宣告為虛函式。

純虛函式是一種特殊的虛函式在許多情況下,在基類中不能對虛函式給出有意義的實現,而是把它宣告為純虛函式,它的實現留給基類的派生類去做。

純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求派生類都定義自己的版本,

純虛函式為各自的派生類提供乙個公公介面,

純虛函式說明形式:

virtual 型別 函式名(參數列)=0

知識點總結 組合,繼承,多型

一 組合 將乙個類的物件作為另乙個類的成員,被稱作組合或包含 1.將嵌入的物件作為新類的公有成員 class eye class nose class mouth class ear class head int main 2.將嵌入物件作為新類的私有成員 class engine void sta...

多型 過載 繼承 修飾符 知識點

package tdd public class aa public void set double acbievement public string getname public string code public string get y public double getachi publ...

繼承知識點總結

一 繼承的定義 1.繼承是物件導向的主要特徵 此外還有封裝和多型 之一,它使得乙個類可以從現有類中派生,而不必重新定義乙個新類。2.繼承的實質就是用已有的資料型別建立新的資料型別,並保留己有資料型別的特點,以舊類為基礎建立新類,新類包含了舊類的資料成員和成員函式,並且可以在新類中新增新的資料成員和成...