Object C複習 C Plushtml
1-->bool 程序員
1.0 BOOL _Bool bool 3個布爾有什麼區別?函數
1.1 看代碼,回答 n的值是: A : 3 B: 1 spa
int main() { int n = 3; bool b = n; n = b; return 0; }
答案: B3d
2--> const 指針
2.0 const首先在C++中產生,C發現很好用,就拿到了C中。調試
2.1 const和宏的區別,const是一種編譯器級別的關鍵字,它有3個特色:1 具備類型的常量 2 編譯時分配空間 3 它是有做用域的。code
2.2 使得const失效有不少方式,如其中一種:const cast<>。htm
2.3 非編譯器級別的常量有: 1數字 10; 2字符串 「Hello World」;帶雙引號的字符串存儲在常量區,是不能夠被更改的。blog
2.4 const修飾的常量能夠稱爲僞常量。使用#define定義出來的常量是真常量。
2.5 const是帶有類型檢測的,好比char*轉int*的時候,使用define的常量,直接替換,而const修飾的常量會有提示。
2.6 const在編譯時會分配空間,更方便調試。
2.7 const它是擁有做用域的,#define是全局的。
2.8 雖然define能全面代替const,但const是給程序員用的,它更易於調試,比較透明,更易於問題的定位。
3-->enum定義常量 複習
3.0 少用define,能夠用enum代替。
3.1 enum和const有哪些不一樣: 1 enum定義出來的是真常量,const修飾的是僞常量。 2 const須要空間的分配,enum不須要分配空間,直接就是一個常數。 3 但const能作到許多enum不能作的如:一個const的指針,enum就無能爲力。
4-->域做用符:: 複習
4.0 域做用符的做用: 1 命名空間 2 類 3 全局(當域做用符前面什麼也沒有時)
5-->new 和 delete 運算符 複習
5.0 new delete 它們是運算符,不是函數。
5.1 malloc() 和 free() 與 new delete 之間區別:malloc()不會調用構造函數,free()也不會調用析構函數。
5.2 new 和 delete 是須要成對出現的。
6-->函數重載 複習
6.0 返回值可以構成重載? A: 對。 B: 錯。 答案B。 重載和函數的返回值沒有關係。
6.1 1參數類型不一樣能構成重載,2參數的個數不一樣也能構成重載,3在類內部,非const版本成員函數和const版本的成員函數能構成重載。
6.2 只要函數命名粉碎後不重名,就能達到重載的目的。
6.3 再次說明: 重載和函數的返回值沒有關係。
6.4 二義性的問題:類型或者被隱匿轉換,或者被強制轉換,更或者被提高轉換,會使得函數參數和一個以上的重載的函數匹配。
6.5 默認形參值: 頭文件裏面初始給出一個值,注意要多個默認形參賦值,要注意順序,從右往左。
7-->引用 複習
7.0 引用可代替指針。
7.1 引用一旦肯定,就不會再被更改。
7.2 回答:看下面代碼,選擇答案 A:100 B: 50 。 答案:B
int main() { int n = 100; int & rn = n; int o = 50; rn = o; //此時n = ? return 0; }
7.3 引用至關於一個變量的別名
7.4 引用 在傳參時,至關於傳自身。
7.5 再看一個錯誤的引用的用法,在函數的棧內部出現的變量,出棧後就不存在了,返回它的引用是有錯誤的。
7.6 返回一個引用,必定要是生命同期不會被結束的,纔是正確的。
8-->類型轉換 複習
8.0 在C++中,如int()的C風格類型轉換是強制轉換,C++中有本身的一套轉換風格。
8.1 1 static_cast<> 2 const_cast<> 3 reinterpret_cast<> 4 dynamic_cast<>
9-->inline 內聯請求 複習
9.0 inline能夠代替define的功能。
9.1 宏是必定會展開的,但inline只是對編譯器發出一個請求,編譯器不必定就實現inline展開。
9.2 轉到反彙編,查看inline是否生效。關鍵看申請inline的函數有沒有call,inline生效則展開來,沒有call。