標籤:純虛函數 space 別名 tab reg lin const關鍵字 efi pac
資料類型
bool 布爾型
char 字元型 8位
wchar_t 寬字元型 16位
short 短整型 16位
int 整形 16位
long 長整形 32位
float 單精確度浮點型 6為有效數字
double 雙精確度浮點型 10位有效數字
long double 擴充精度浮點型 10位有效數字
修飾符:資料類型前面可以加上一個和多個修飾符 ,例如long long ,前一個是修飾符,後一個是類型
- signed
- unsigned
- short
- long
typedef 用來為已有資料類型起別名
sizeof()函數可以擷取類型的大小
struct
enum
C++數組定義與賦值:int ar[] char ch[]
C++字串:C++可以使用char數組代替字串,也可以引入 <string>標頭檔,使用String建構函式;
{‘abc‘,‘def‘,‘jnm‘}可以看成字串數組,數組元素為char數組
常量:使用const關鍵字,或#define 定義
------------------------------------------------------------------------
儲存類:修飾符
- auto
- register
- static
- extern
- mutable
- thread_local (C++11)
-------------------------------------------------------------------------
指標和引用的區別
int i=1; int& r=i; r是i的引用
int *p=&i;
指標定義時*不必與int 或 p 相鄰,int* p int *p int * p都能正常編譯
根據不同情況選擇不同格式可以使代碼方便閱讀
----------------------------------------------------------------------------
物件導向
類
c++中類可以看成一種資料機構,可以與函數、結構體處於同一層級,與Java中一個類就是一個java檔案不同
C++中類的結構:
class Demo
{
public:
int a;
int func()
{
return 0;
}
private:
int b;
}
類成員修飾符:public protect private(預設)
類成員函數:可以在類中聲明並定義(函數體),或者只在類中聲明,使用 :: 運算子在類外面定義;
建構函式和解構函式:解構函式用來刪除對象
拷貝建構函式、內嵌函式、友元函數
---------------------------------------------------------------------------------------
C++中類的繼承,一個類可以有多個直接父類,多繼承(如果多個直接父類中有同名變數或函數,怎麼處理)
繼承的寫法:class 衍生類別 : 存取修飾詞 基類{}
思考:同一個類、衍生類別、外部類分別有3、2、1個存取權限,public protect private(預設);
衍生類別繼承哪些函數、哪些不繼承(基類的建構函式、解構函式和拷貝建構函式、基類的重載運算子、基類的友元函數)
---------------------------------------------------------------------------------------------
C++多態與Java多態
虛函數,使用virtual關鍵字定義,告訴編譯器不要靜態連結,在衍生類別中重新定義虛函數(相當於Java方法重寫),根據衍生類別的類型調用不用的重寫方法
純虛函數,沒有方法體,方法體用 =0;代替,表示這是一個純虛函數,相當於Java中的抽象方法
介面(抽象類別):至少有一個純虛函數,這點與Java中的介面和抽象類別不同。
---------------------------------------------------------------------------------------------------
Java泛型和C++模板的區別,Java的泛型是文法糖,與模板有很多區別
-----------------------------------------------------------------------------------------
命名空間:在同一個命名空間下不能有同名的變數和函數,命名空間表示一個範圍
命名空間的定義和使用
使用namespace關鍵字定義
namespace 空間名 { 代碼。。。。 }
using namespace ...
使用範圍運算子 :: 調用特定命名空間中的函數
------------------------------------------------------------------------------------------
C++ STL:類似於Java的集合架構,封裝了一些資料結構的操作
--------------------------------------------------------------------------------------
動態記憶體分配
C語言中使用malloc()和free()函數族
C++中使用new和delete運算子
malloc()函數原型及使用
(void *)malloc(int size)
malloc函數傳回值是void類型的指標,接收的參數是int類型
調用malloc函數需要將void類型指標強制轉換成具體的資料類型指標,然後賦值給指標變數
char *p = (char *)malloc(100);
free()函數釋放記憶體,參數是記憶體首地址
free(p);
使用free()函數釋放記憶體後,p指標的值並沒有變,為了防止再次使用p指標造成錯誤,應該p=NULL;
----------------------------------------------------------------------
new 運算子的使用,new可以用來申請記憶體配置,也可以來建立類對象
使用new建立的對象需要用指標變數接收,此對象在堆記憶體中,使用delete 對象名刪除對象
不使用new建立的對象存放在棧記憶體中
malloc和new的區別:因為malloc是函數,編譯器無法控制,但是建立對象又需要自動執行建構函式,刪除時要執行解構函式,所以C++使用new運算子分配記憶體
------------------------------------------------------------------------------
函數執行時棧與寄存器的變化
ebp寄存器儲存棧底地址
esp寄存器儲存棧頂地址
當一個函數中調用另一個函數時
首先將當前函數的棧底地址,也就是ebp寄存器中的值壓棧,esp地址增加1,
將esp中的值存放到ebp中
esp增加1
這樣ebp寄存器中的地址值指向的記憶體中存放的值是當前函數的調用函數的棧底
http://www.cnblogs.com/syw-casualet/p/5223595.html
C++筆記