函數重載:符號的生成規則
函數重載的三要素:1.同名 2.同參 3.同作用域
C函數名稱
C++函數原型:1.形參的個數 2.形參的類型 3.函數的形參 <1>形參的個數 <2>形參的類型 <3>形參的順序
多態:同一接口,不同的形態
new和delete的區別:
new 申請內存,調用構造函數。
delete 調用析構函數,釋放內存。
1.new和malloc有什麼區別
2.動態開闢內存
C語言中:
malloc是函數 void* malloc(size_t size)
free是函數 void free(void* ptr)
C++中:
new是關鍵字 malloc是關鍵字
區別:1.new是關鍵字 malloc是函數
2.new再自由存儲區域 malloc在堆上
3.new可以做初始化 malloc單純開闢內存
4.new可以重載 operator new 調用構造
malloc不能重載
5.new可以調用malloc malloc不能調用new
6.new可以開闢常量 malloc不能開闢常量
const
C語言中:修飾常變量 編譯階段,常變量是否做左值 其他處理和變量是一樣
const int gdata=10;//global
C++中:修飾常量 不能作爲左值,不能定義數組大小,沒有編譯時期的替換規則。
編譯階段,把用到常量的地方替換成常量初始化的值
const int gdata=20;//.data1 extern
<1>一定要初始化 (初始化必須寫在構造函數的初始化列表中)
<2>不能做左值 <3>不能間接修改,杜絕間接訪問來修改常量內存的風險
引用&:別名(內存單元的別名)
1.一定要初始化 引用底層是* const指針,必須初始化
2.引用 不能引用 不能取地址的數據
3,引用不能改變(引用一經引用一塊內存,再也不能引用其他內存)
4.引用只能使用,引用變量所引用的數據
inline函數:inline關鍵字修飾的函數成爲內聯函數,是對系統的建議,並不保證一定處理爲內聯。
編譯 函數調用 代碼展開(在編譯階段,在函數調用點將函數的代碼展開,省略了函數棧幀開闢回退的調用開銷,效率比較高)
inline函數和static修飾的函數的區別:
1.inline 無開棧清棧的開銷 static 有
2.inline表示在編譯階段有代碼的展開,內聯函數不產生符號,本文件可見。遞歸,循環等函數結構不可能被處理爲內聯。
static 符號屬性爲1,在文本文件可見,將global變爲local,
inline 和宏的區別
1.inline編譯階段處理,有類型檢查和安全檢查
宏:預編譯階段 無安全檢查
2.inline是一種更安全的宏
inline注意事項:1.inline一般寫在頭文件中 2.inline是給編譯器的一個建議(遞歸i,循環,switch等不會處理)3.inline是基於實現的,不是基於聲明的。
inline的缺點:代碼膨脹爲代價,空間換時間
1.棧的開銷 >執行的開銷 設爲inline
2.棧的開銷 <執行的開銷 不建議inline
函數的默認值:
1.從右往左依次賦予
2.不能重複賦予
3.一般寫在聲明上
C和C++的相互調用
1.C++調用C 使用extern "C",修飾函數聲明
2.C調用C++ <1>C++源文件可修改 C++加 exter "C"
<2>C++源文件不可修改 加中間層.cpp
3..C被調用 #ifdef_cplusplus