《C++程式設計》的要點記錄

來源:互聯網
上載者:User

標籤:參數初始化   形參   保護   外部變數   amp   編譯   語句   讀書筆記   格式   

 20170723修改:Markdown對代碼和表格的相容性不好,改成TinyMCE編輯的格式了,這樣看起來沒那麼彆扭了!

前言

第一次寫部落格,也是第一次用markdown寫部落格,覺得會比較有意思吧!能夠長期堅持寫部落格應該是個很優秀的習慣,作為小白,希望自己能夠踏踏實實一步一個腳印的記錄自己所學的東西。第一篇寫的是譚克強老師的《C++程式設計》的讀書筆記,主要記錄該書中的一些知識點,由於該書將的內容比較局限和淺顯,但是還是適合我這個非專業編程人員看,算給自己入個門和打個C++基礎,下一步就好好啃《C++primer》這本聖經,重要的就是要養成做讀書筆記的習慣,永遠相信“不積跬步,無以至千裡”這句話!哈哈,算是一種勉勵自己的方式吧,加油,Chris_lzy!初稿寫於2017年7月22日下午晴

第一篇 基本知識
  • 字串常量:"abc\n"包含4個字元,但是記憶體中佔有5個位元組(包含"\n"結束字元)。
  • 強制類型轉換運算子:在強制類型轉換時,得到一個所需類型中間變數,但原來的變數的類型未發生改變,eg:`(int)x`, 如果x原指定為float類型值為3.6, 強制轉換後得到int型值為3,但是x得類型與值並沒有發生變化。
  • C++的輸入與輸出:在執行cout語句時,並不是一插入一個資料就馬上輸出,而是將資料放入緩衝區,直到緩衝區滿或者遇到endl(或‘\n‘、ends flush等)為止,此時將緩衝區中的資料一併輸出,並清空緩衝區;在執行cin語句時,系統會將空格作為資料的間隔符,斷行符號換行鍵作為結束符。所以這兩個字元不能作為字元變數的輸入,但是getchar函數可以。
  • 運算子的優先順序:!(非)>算術運算子 > 關係運算子 > &&(與)和||(非) > 賦值運算子
第二篇 基於過程的程式設計
  • 條件運算式:(a>b)?a:b,如果(a>b)為真,這運算式值取a,否則取b。
  • switch語句:`switch(運算式) {}` 運算式可以為任何類型,記住break、default
  • while和do-while語句:while先判斷運算式,然後決定是否進入語句;do-while先進入一次語句,再判斷運算式。
  • break和continue:break是結束整個迴圈,continue是結束本次迴圈進入下次迴圈
  • 內建函數(inline):內建函數中不應該包括複雜的控制語句,如迴圈和switch語句,內建函數的作用是減少函數調用的時間開銷,但是在編譯時間增加了代碼的長度。
  • 函數的重載:一名多用,根據函數的參數個數和類型的不同,用同一個函數名定義多個函數。
  • 函數模板:通用函數,調用函數時會根據實參的類型來取代模板中的虛擬類型。
  • 有預設參數的函數:預設參數必須放在形參的表列的最右端;一個函數不能即作為函數重載,又作為預設參數的函數,否則會產生二義性。
  • 函數的遞迴調用:遞迴公式+遞迴結束的條件(邊界條件)。
  • 變數的範圍、生命週期:(1)按照範圍可分為局部變數(動態局部變數、靜態局部變數和函數形參)和全域變數(靜態全域變數、外部變數);(2)按照生命期可分為動態儲存裝置(動態局部變數、函數形參等)和靜態儲存(靜態局部變數、靜態外部變數和外部變數等)
  • 內建函式(static)和外部函數(extern,可省略):內建函式只能被本函數調用,外部函數能夠被其他檔案調用,現在常用包含標頭檔的方法。
  • include命令的兩種形式:(1)`#include<檔案名稱>` 例如`#include<iostream>`包含的是C++系統提供的標頭檔;(2)`#include"檔案名稱"`例如`#include"c:\tan\file.c"`要求編譯系統在指定路徑尋找標頭檔,例如`#include"file.c"`在使用者程式當前路徑下尋找檔案。
  • 字串處理函數:(1)字串串連函數strcat,函數原型為`strcat(char[],const char[])`;(2)字串複製函數strcpy,函數原型為`strcpy(char[], const char[])`; (3)字串比較函數strcmp,函數原型為`strcmp(const char[], const char[])`; (4)字串長度函數strlen,函數原型為`strlen(const char[])`。**注意**:可以用字串常量初始化字元數組,但不能用字串常量給字元數組賦值;可以用字串常量初始化和賦值字串變數。
  • 指標作為函數形參:(1)正確的例子
void swap(int *p1, int *p2 ){     int temp;    temp=*p1;    *p1=*p2;    *p2=temp;}

(2)錯誤的例子

void swap(int *p1, int *p2){    int *temp;    *temp=*p1;    *p1=*p2;    *p2=*temp;}

分析:例二中定義了指標變數temp,未對該指標變數賦值(指向對象),但是對*temp賦值是非常危險的,可能會破壞系統的正常工作。

  • 引用一個數組元素:(1):下標法`a[i]`   (2):指標法`*(a+i)或*(p+i)`其中a為數組名,p為指向數組某元素的指標。
  • 指標與自加運算

      (1) *p++等價於*(p++)先得到p指向變數的值*p,再使p指標加1;
      (2) *(++p)先對p指標值加1,再取p指向變數的值;
      (3) (*p)++表示對p所指向變數的值加1。

  • 指標數組和數組指標

      (1)指標數組:int *p[n] 數組由n個指向整型資料的指標元素組成;
      (2)數組指標: int (*p)[n] p為指向n個整型元素的指標變數。

  • 引用:在聲明一個參考型別變數時,必須同時使之初始化,即聲明它代表那一個變數,引用主要把它作為函數的參數,以擴充函數傳遞資料的功能,它向形參傳遞的是實參的地址而不是實參的值。指標變數作為形參是需要開闢記憶體空間,而引用變數不是一個獨立的變數,不單獨佔記憶體空間。
  • 共用體(union):使用共用體的目的是希望用同一個記憶體段存放幾種不同類型的資料,共用體變數所佔記憶體的長度等於最長的成員的長度,共用體變數在訪問成員是在每一瞬間只能有一個成員起作用,其他成員不起作用。
  • 枚舉類型(enum):格式為 enum 枚舉類型名 {枚舉常量列表};枚舉元素為常量,因此不能對他們賦值。
第三篇 基於對象的程式設計
  • 成員函數的儲存方式:每個對象所佔用的儲存空間只是該對象的非static資料部分的所佔用的空間,而不包括函數代碼和static成員變數所佔用的空間,不同的對象通過this指標調用成員函數。
  • 函數初始化列表:例如`Box::Box(int n, int w, int len): height(h),width(w),length(len) {}`.
  • 共用資料的保護(const):    

      (1)常對象:常對象中資料成員為const型,成員函數為non-const型,外部不能調用該對象的non-const成員函數。`
      (2)常成員資料:只能通過建構函式的參數初始化列表來對常成員函數初始化
      (3)常成員函數:只能引用本類的資料成員,而不能修改它

資料成員 非const成員函數 const成員函數
|非const成員資料 可以引用,也可以改變其值 可以引用,但不可以改變其值
|const成員資料 可以引用,但不可以改變其值 可以引用,但不可以改變其值
const對象的成員資料 不允許 可以引用,但不可以改變其值

 

  • const與指標(左定值,右定向)

      (1) const 類型名 *指標變數名:指向常對象的指標變數(左定值)
      (2) 類名 * const指標變數名:指向對象的常指標(右定向)

  • 實現資料的共用(static)

      (1)待用資料成員:待用資料成員在記憶體中只佔一份空間;它屬於類,不屬於對象,為對象非配記憶體空間時不包括靜態成員所佔的空間;靜態成員的初始化只能在類體外進行;待用資料成員既可通過對象名引用,也可通過類名引用。
      (2)靜態成員函數:靜態成員函數主要是用來訪問待用資料成員的,而不能訪問非靜態成員(沒有this指標);靜態成員函數可以通過對象名引用,夜可以通過類名引用。

《C++程式設計》的要點記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.