C++溫故而知新小結

緣起:

由於項目的原因需要重新拿起C++的知識所以就有了這次快速的複習(本人近兩年左右一直用的C#語言,做的是Unity3D,現在需要用UE4開發(UE4是使用藍圖及C++語言),太長時間沒用C++所以先簡單複習一下基本的語法知識)下面僅僅是學習中的小結(簡單筆記,作爲自己的總結再次寫一下,如有不妥望指正,一直在路上共同進步)

正文:

1、 cout << "Hello World!\n"; cout<<"Hello World!"<<endl
endl 除了寫“\n”外,還調用flush函數,刷新緩衝區,把緩衝區裏的數據寫入文件或屏幕,考慮效率就用“\n”。
注:在沒有必要刷新輸出流的時候應儘量使用cout<<"\n",過多的endl是影響程序執行效率低下的因素之一。

2、變量保留的是它所儲存的值的內存位置.(創建即會在內存中保留一些空間)

3、聲明和定義的區別:
定義包含了聲明,但是聲明不包含定義,eg:

 int a=0; //定義並聲明瞭變量a
 extern int a;//只是聲明有個變量a存在,具體a在哪裏定義,需要編輯器編譯的時候去找

注:函數的聲明和定義也類似

4、全局變量從定義處開始至程序結束起作用,即全局變量存在有效作用域(同時變量只要在開頭聲明,不管變量在哪裏定義都可使用)

5、全局變量和局部變量同名時,可通過∷ 域名在函數中引用到全局變量,不加域名解析則引用局部變量。

6、關於靜態局部變量
儲存在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量儲存在靜態儲存區(全局變量和static變量),只不過和全局變量比起來,static可以控制變量的可見範圍,說到底static還是用來隱藏的,雖然這種用法不常見。
注:如果作爲static局部變量在函數內定義,它的生存週期爲整個源程序,但是其作用域仍與自動變量相同,只能在定義該變量的函數內使用該變量。退出該函數後,儘管該變量還繼續存在,但不能使用它。

7、把常量定義爲大寫字母形式,是一個很好的編程實踐。

8、預處理#define變量定義值以後,不能用分號,否則就會計算錯誤,但程序不會報錯。

9、無符號 正數的源碼、反碼、補碼都一樣。
有符號 負數的反碼爲原碼按位取反,補碼爲反碼加1.

10、電腦中存儲的二進制是以補碼的形式儲存的。
十進制轉二進制除二取餘,從後往前排。
反碼爲除最高位之外按位取反,補碼爲反碼加1。
二進制轉十進制爲2的n次方,整數從右到左相加,之後小數從前到後相加

11、對於無符號化爲有符號的位運算,採取N-2∧n的計算方法,n取決於定義的數據類型int、short、char、long int 等等,N爲無符號數的數值,eg:N=50000,short爲16位,計算方法位50000-2∧16得到-15536。

12、類與結構體在C++中只有兩點區別,除此之外無任何區別
①、class中默認的成員訪問權限值private的,而struct中則是public的。
②、從class繼承默認是private繼承,而從struct繼承默認是pubic繼承。
③、class可以定義模板,而struct不可以。
④、不同於C#,C++類和結構體的大括號後邊都需要加“;”。
⑤、∷ 範圍解析運算符

13、C++可以多繼承,虛繼承(在創建對象的時候會創建一個虛表)在創建父類對象的時候。

14、類中的重載、覆蓋、重定義之間的區別:
①、重載指的是函數具有的不同的參數列表,而函數名相同的函數。
重載要求參數列表必須不同,比如參數的類型不同、參數的個數不同、參數的順序不同。如果僅僅是函數的返回值不同是沒有辦法重載的,因爲重載要求參數列表必須不同。(發生在同一個類中)
②、覆蓋是存在類中,子類重寫從基類繼承過來的函數。被重寫的函數不能是static的,必須是virtual的,但函數名、返回值、參數列表都必須和基類相同.(發生在基類和子類中)
③、重定義也叫做隱藏,子類重新定義父類中有相同名稱的非虛函數(參數列表可以不同)。(發生在基類和子類中)

15、純虛函數
方便在派生類中重新定義該函數更好i的適用於對象,但在基類中又不能對虛函數給出有意義的實現,這個時候就會用到純虛函數, virtual int area() =0
其中=0是爲了告訴編譯器,函數沒有主體,上面的虛函數就是純虛函數。

16、new 分配內存並創建對象。
delete 操作符釋放它所佔用的內存。

打完收工。。。。。。。。。。
這個是這個兩天重新學習的時候的隨手筆記,沒有經過整理,待有時間在整理一下,補充點知識。

發佈了47 篇原創文章 · 獲贊 77 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章