C++知识点打结(二)
C++知識點打結(二)
- 11. 多繼承
- 12. 內存分配
- 13. 枚舉
- 14. fopen
- 15. 32位機器輸出
- 16. 轉義字符
- 17. 預算符優先級
- 18. Const
- 19. 預處理
- 20. Fork進程拷貝
11. 多繼承
含有純虛函數的類是抽象類,不能實例化。
在多繼承中,派生類和被繼承的第一個基類的地址相同,和第二個基類的地址不同
12. 內存分配
-
棧:就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變量的存儲區。里面的變量通常是局部變量、函數參數等。
-
堆:就是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,那么在程序結束后,操作系統會自動回收。
-
自由存儲區:就是那些由malloc等分配的內存塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。
-
全局存儲區(靜態存儲區):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后有系統釋放。
-
常量存儲區:這是一塊比較特殊的存儲區,他們里面存放的是常量,不允許修改。
13. 枚舉
enum color {red,yellow=2,blue,white,black}如果yellow不賦值為2,則red應為0,后面的元素值依次遞加,依次為 0 1 2 3 4;
但是現在yellow=2,故red=0,yellow后元素依次在2的基礎上遞加,結果為 0 2 3 4 5
14. fopen
fopen存在下面幾種模式:
- r以只讀方式打開文件,該文件必須存在。
- r+以讀/寫方式打開文件,該文件必須存在。rb+以讀/寫方式打開一個二進制文件,只允許讀/寫數據。
- rt+以讀/寫方式打開一個文本文件,允許讀和寫。
- w打開只寫文件,若文件存在則長度清為 0,即該文件內容消失,若不存在則創建該文件。w+打開可讀/寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。
- a以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留(EOF 符保留)。
- a+以附加方式打開可讀/寫的文件。若文件不存在,則會建立該文件,如果文件存在,則寫入的數據會被加到文件尾后,即文件原先的內容會被保留(原來的 EOF 符不保留)。
- wb以只寫方式打開或新建一個二進制文件,只允許寫數據。
- wb+以讀/寫方式打開或建立一個二進制文件,允許讀和寫。
- wt+以讀/寫方式打開或建立一個文本文件,允許讀寫。
- at+以讀/寫方式打開一個文本文件,允許讀或在文本末追加數據。
- ab+以讀/寫方式打開一個二進制文件,允許讀或在文件末追加數據。
15. 32位機器輸出
32位機器上,以下代碼的輸出是
char c = -1; int i0 = c; int i1 = (unsigned char)c; printf("%d, %d\n", i0, i1);char類型有符號,所以-1可以表示,uchar類型無符號(范圍是0-255),-1是1000 0001,轉換成補碼是1111 1111,uchar無符號位,所以最高位的1也計算到值里,為1+2+4+…+128=255
16. 轉義字符
轉移字符以\或者\x開頭,以\開頭(\ddd)表示八進制,以\x開頭(\xdd)表示十六進制。(d表示數字)
\0oo: 八進制值(oo必須是有效的八進制數,即每個o可表示0~7中的一個數)
\xhh: 十六進制值(hh必須是有效的十六進制數,即每個h可表示0~f中的一個數)
轉義字符以\開始,如果是\x(注意是小寫,C語言是區分大小寫的)開頭,后面接16進制數,如果以\開頭,后面接八進制數。
轉移字符表示的數據范圍有限,因此對\x開頭的 ,只能是\xxx(后面兩位表數據)這種格式的,意思是只能接兩位數據,最大值為\x7f
對\開頭的,后面可以接三位數據,即\xxx(后三位均為數),最大值為\177
17. 預算符優先級
運算符優先級:!> 算術運算符 > 關系運算符 > (&& ||)> 條件運算符> 賦值運算符 > 逗號運算符
18. Const
cons 在*的左邊,則指針指向的變量的值不可直接通過指針改變(可以通過其他途徑改變);
在*的右邊,則指針的指向不可變。
簡記為"左定值,右定向"。
19. 預處理
#define 定義一個預處理宏
#undef 取消宏的定義
#if 編譯預處理中的條件命令,相當于C語法中的if語句
#ifdef 判斷某個宏是否被定義,若已定義,執行隨后的語句
#ifndef 與#ifdef相反,判斷某個宏是否未被定義
#elif 若#if, #ifdef, #ifndef或前面的#elif條件不滿足,則執行#elif之后的語句,相當于C語法中的else-if(擴展條件)
#else 與#if, #ifdef, #ifndef對應, 若這些條件不滿足,則執行#else之后的語句,相當于C語法中的else(擴展條件)
#endif #if, #ifdef, #ifndef這些條件命令的結束標志.
defined 與#if, #elif配合使用,判斷某個宏是否被定義
20. Fork進程拷貝
for (int i = 0; i < 2; i++){fork();print("-\n");}會打印6個“-”。
- i = 0 時,fork()后,拷貝當前進程,總共2個進程,打印2個-;
- i = 1 時,2個進程又拷貝一下,共4個進程,打印4個-;
fork()函數是通過系統調用實現進程的拷貝。
總結
以上是生活随笔為你收集整理的C++知识点打结(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: signature=c9b7b92b79
- 下一篇: 中国统计年鉴2021(各省份经济指标,人