第8章 C 函式的高階特性

2022-06-22 06:45:10 字數 1502 閱讀 9038

一、函式過載的概念

1、同名函式,引數不同(包括型別、順序不同)

2、全域性函式和類的成員函式同名不算過載,因為函式的作用域不同(全域性函式被調時應加「::」標誌)

二、成員函式的過載、覆蓋與隱藏

1、成員函式被過載的特徵:

a、相同的範圍(在同乙個類中)

b、函式名字相同

c、引數不同

d、virtual關鍵字可有可無

2、覆蓋是指派生類函式覆蓋基類函式,特徵是:

a、不同的範圍(分別位於派生類和基類)

b、函式名字相同

c、引數相同

d、基類函式必須有virtual關鍵字

3、如果派生類的函式與基類的函式同名,但引數不同,此時無論有無virtual關鍵字,基類的函式將被隱藏

如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式將被隱藏

注:下面這個**是自己總結的,僅供參考:

三、引數的預設值

1、引數預設值只能出現在函式的宣告中,而不能出現在定義體中

(有宣告的時候最好寫在宣告中,宣告和定義只能寫乙個,沒有宣告只可以寫在定義中)

2、如果函式有多個引數,引數只能從後向前挨個兒預設

四、運算子過載

1、用關鍵字operator加上運算子來表示函式

2、普通函式與運算子的區別:普通函式的引數出現在括號內,而運算子,則出現在左右兩側

3、若被過載為全域性函式則有乙個引數的運算子叫做一元運算子,有兩個引數的叫做二元運算子

若被過載為類的成員函式,一元運算子沒有引數,二元運算子有乙個引數。

5、不能改變c++內部資料型別(如int,float等)的運算子

不能過載 『.』 ,因為 『.』 在類中對任何成員都有意義,已經成為標準用法

不能過載目前c++運算子集合中沒有的符號,如&、#、@等

不能改變優先順序規則

五、函式內聯

1、編譯器在符號表中放入函式的宣告(包括名字,引數型別,返回值型別),如果沒有發現內聯函式存在錯誤,那麼該函式的**也被放入符號表裡。

2、在呼叫乙個內聯函式的時候,編譯器會首先檢查呼叫是否正確,進行型別安全檢查,或者自動型別轉換,如果正確,內聯函式的**就會直接替換函式呼叫

3、關鍵字inline必須與函式定義體放在一起才能使函式成為內聯,僅將inline放在函式宣告前不起任何作用。

4、定義在類宣告之中的成員函式將自動成為內聯函式。

5、內聯函式是以**膨脹為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率

6、以下情況不宜使用內聯函式:

a、如果函式體內的**比較長

b、如果函式體內出現迴圈

第 8 章 C 函式的高階特性索引

對比於c 語言的函式,c 增加了過載 overloaded 內聯 inline const 和virtual四種新機制。其中過載和內聯機制既可用於全域性函式也可用於類的成員函式,const 與 virtual 機制僅用於類的成員函式。過載和內聯肯定有其好處才會被c 語言採納,但是不可以當成免費的午餐...

第8章 函式

位置實參,關鍵字是參 預設值,注意順序,把已經有預設值的放在最後 topping這個可以接收任何實參,一般放形參最後,它是個空元組,當作列表一樣就行 def pet name,size 27 預設值 print name size n input please get me a name s inp...

第8章 函式

定義函式,注意書寫格式 向函式傳遞資訊 實參和形參 傳遞實參 位置實參,注意順序 關鍵字實參,名稱和值對應,寫在函式裡,務必準確指定函式定義的形參名 預設值混合使用時,注意格式,讓實參變成可選的,新增預設值,並且放在形參列表最後 切片法 建立列表副本 星號建立空元組,傳遞任意數量的實參 結合使用位置...