函數(shù)的重載:語義和功能相似的函數(shù)用相同的名字表示,編譯器根據(jù)不同的參數(shù)為不同的函數(shù)產(chǎn)生不同的內(nèi)部標(biāo)識符
C++函數(shù)調(diào)用C函數(shù):extern "C"{ }
!!并不是函數(shù)名相同就是重載,全局函數(shù)和類成員函數(shù)就不是重載,作用域不同
防止隱式類型轉(zhuǎn)換而導(dǎo)致重載函數(shù)調(diào)用的二義性
成員函數(shù)的重載、覆蓋和隱藏
重載的特征overload:
(1)具有相同的范圍(在同一個類中)
(2)函數(shù)名字相同
(3)參數(shù)不同
(4)virtual關(guān)鍵字可有可無
覆蓋的特性overriding:
派生類覆蓋基類的函數(shù):
(1)范圍不同(不在同一個類中)
(2)函數(shù)名字相同
(3)參數(shù)相同
(4)基類必須帶virtual關(guān)鍵字
隱藏規(guī)則:
(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual
關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual
關(guān)鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)。
參數(shù)的缺省
只能出現(xiàn)在函數(shù)聲明中
關(guān)鍵字inline 必須與函數(shù)定義體放在一起才能使函數(shù)成為內(nèi)聯(lián)
定義在類聲明之中的成員函數(shù)將自動地成為內(nèi)聯(lián)函數(shù)
(1)如果函數(shù)體內(nèi)的代碼比較長,使用內(nèi)聯(lián)將導(dǎo)致內(nèi)存消耗代價較高。
(2)如果函數(shù)體內(nèi)出現(xiàn)循環(huán),那么執(zhí)行函數(shù)體內(nèi)代碼的時間要比函數(shù)調(diào)用的開銷大
1)內(nèi)存的幾種分配方式:
靜態(tài)存儲區(qū):全局變量和靜態(tài)變量
棧空間:局部變量,參數(shù)
堆分配(動態(tài))
2)常見的內(nèi)存處理錯誤以及策略:
1 分配未成功就開始使用
對策:檢測指針是否為NULL(判斷)
ex:assert(p!=NULL)//若P為函數(shù)的參數(shù)
if(p!=NULL)/if(p==NULL) //判斷分配內(nèi)存是否有效
2 內(nèi)存分配成功但沒初始化(賦初值)
3 內(nèi)存分配成功但操作越界
4 忘記釋放內(nèi)存而造成內(nèi)存泄露
5 釋放了內(nèi)存卻繼續(xù)使用它
原因:過多的對象調(diào)用
return語句中返回了指向棧空間的指針或其引用,該內(nèi)存在函數(shù)體結(jié)束后自動銷毀
使用free/delete后沒有將指針置NULL產(chǎn)生野指針
3)數(shù)組和指針的區(qū)別
1 內(nèi)容的修改:
ex1:
char a[]="hello"; //a為字符數(shù)組
a[0]='X'; //a的內(nèi)容可以修改
cout<