函數重載的條件
? 同一個名字
? 函數名字相同
? 參數列表不同
? 同一個作用域
為什么c++支持函數重載而c不支持?
c++函數名字的修飾規則不一樣。c++編譯器對函數修飾規則把int的參數列表形式加了進來,從而保證底層使用不同
c | Add(int a,int b) | _Add |
---|---|---|
c++ | Add(int a,int b) | ?Add@@YAHHD@Z |
引用和指針的相同點不同點?
相同點
在語法概念上引用就是一個別名,沒有獨立空間,都是指針和引用實體共用同一塊空間。
不同點
- 引用在定義時必須初始化,指針沒有要求
- 引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型實體
- 沒有NULL引用,但有NULL指針
- 在sizeof中含義不同:引用結果為引用類型的大小,但指針始終是地址空間所占字節個數(32位平臺下占4個字
節) - 引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小
- 有多級指針,但是沒有多級引用
- 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
宏的優缺點?
優點:
1.增強代碼的復用性。
2.提高性能
缺點:
1.不方便調試宏。(因為預編譯階段進行了替換)
2.導致代碼可讀性差,可維護性差,容易誤用。
3.沒有類型安全的檢查
類的成員變量有兩種初始化方式?
1.初始化列表。
2.構造函數體內進行復制。
初始化列表以一個冒號開始,接著一個都要分隔數據列表,每個數據成員都放在一個括號中進行初始化。盡量使用初始化列表進行初始化,因為它更高效。
哪些成員變量必須放在初始化列表里面?
1.常量成員變量。
2.引用類型成員變量。
3.沒有缺省構造函數的類成員變量。
命名空間?
避免名字污染
C++中有很多函數、變量、類的名字都是大量存在于全局命名空間的,為了避免命名沖突和名字污染,使用命名空間對標識符的名稱進行本地化。