Tips on C/C++

運算符優先級

!> 算術運算符 > 關係運算符 > (&& ||)> 條件運算符> 賦值運算符 > 逗號運算符

庫引用

include   ""是先從本地目錄開始尋找,而後去尋找系統路徑,而Include   <>   相反先從系統目錄,後從本地目錄。好比:安全

  • 當用#include「file.h」時,先搜索當前工做目錄,若是沒有,再去搜索標準庫,庫沒有再搜索資源庫;
  • 當用#include<file.h>時,編譯器先從標準庫開始搜索,若是沒再搜索資源庫目錄,若還未找到則搜索當前工做目錄。

抽象類不能被實例化,可是能夠存在抽象類指針指向子類。數據結構

模板類的繼承包括四種:函數

  • 1.(普通類繼承 模板類
  • 2.(類模板繼承了普通類(很是常見))
  • 3.(類模板繼承類模板)
  • 4.(類模板繼承 模板類,即繼承模板參數給出的基類)
注:模板類是類模板的一個實例。即,類型參數具體化。

多態

多態主要以兩種形式,靜態多態和動態多態。spa

靜態多態主要實現了函數重載和運算符重載。指針

動態多態主要實現了虛函數。虛函數是動態聯編,程序在運行的過程當中肯定調用哪個函數。調試

重載

函數重載的條件是:函數名相同,參數類型或者個數不一樣,返回類型不能視爲重載。對象

宏和函數

先說宏和函數的區別:
  • 1.宏作的是簡單的字符串替換(注意是字符串的替換,不是其餘類型參數的替換),而函數的參數的傳遞,參數是有數據類型的,能夠是各類各樣的類型.
  • 2.宏的參數替換是不經計算而直接處理的,而函數調用是將實參的值傳遞給形參,既然說是值,天然是計算得來的.
  • 3.宏在編譯以前進行,即先用宏體替換宏名,而後再編譯的,而函數顯然是編譯以後,在執行時,才調用的.所以,宏佔用的是編譯的時間,而函數佔用的是執行時的時間.
  • 4.宏的參數是不佔內存空間的,由於只是作字符串的替換,而函數調用時的參數傳遞則是具體變量之間的信息傳遞,形參做爲函數的局部變量,顯然是佔用內存的.
  • 5.函數的調用是須要付出必定的時空開銷的,由於系統在調用函數時,要保留現場,而後轉入被調用函數去執行,調用完,再返回主調函數,此時再恢復現場,這些操做,顯然在宏中是沒有的.
內聯函數與宏的區別:
  • 1.內聯函數在運行時可調試,而宏定義不能夠;
  • 2.編譯器會對內聯函數的參數類型作安全檢查或自動類型轉換(同普通函數),而宏定義則不會;
  • 3.內聯函數能夠訪問類的成員變量,宏定義則不能;
  • 4.在類中聲明同時定義的成員函數,自動轉化爲內聯函數。

靜態成員

靜態成員數據是屬於類的,類的全部對象共享。繼承

靜態成員依賴於類而不是對象。內存

靜態成員數據視做全局變量。資源

數據類型

float型數據一般用IEEE754單精度浮點數格式表示:(32位)
三部分組成:符號位、階碼、尾數;
1.符號位:第31位(0-31)正數--0        負數--1
2.階碼:第30位----第23位(共8位)
計算:將實數轉化爲二進制的指數表示形式,形如 a*2^n;a的取值範圍應在在1~2之間,階碼 = n + 127,最後將其表示成二進制形式
3.尾數:第22位----第0位
上述參數a的小數部分爲尾數部分
 
 
示例: -8.25:
1.符號位 = 1;
2. (8.25) 10 = (1000.01) 2 = 1.000 01 * 2^3;        n = 3        階碼    =    3+127 = (130) 10 = ( 100  0001  0) 2
3.尾數 : 000 0100  0000 0000 0000 0000
最終結果 : 1100 0001 0000 0100 0000 0000 0000 0000
                    1        100 0001 0        000 0100 0000 0000 0000 0000
                符號位        階碼                                    尾數

const

* (指針)和 const(常量) 誰在前先讀誰 ;*象徵着地址,const象徵着內容;誰在前面誰就不容許改變。
常量指針:指向的地址能夠變,但內容不能夠從新賦值,內容的改變只能經過修改地址指向後變換。
指針常量:指向的地址不能夠從新賦值,但內容能夠改變,必須初始化,地址跟隨一輩子。
 

struct

C++中的struct對C中的struct進行了擴充,它已經再也不只是一個包含不一樣數據類型的數據結構了,它已經獲取了太多的功能。
struct能包含成員函數嗎? 能!
struct能繼承嗎? 能!!
struct能實現多態嗎? 能!!!
 

既然這些它都能實現,那它和class還能有什麼區別?

最本質的一個區別就是默認的訪問控制: 

默認的繼承訪問權限

struct是public的,class是private的。

相關文章
相關標籤/搜索