1. 程式人生 > >C++筆記

C++筆記

struct ++ stat float 靜態鏈接 關鍵字 整型 char數組 clas

數據類型

  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++筆記