C++的思想

函數重載:符號的生成規則

函數重載的三要素:1.同名 2.同參 3.同作用域

C函數名稱
C++函數原型:1.形參的個數 2.形參的類型 3.函數的形參  <1>形參的個數  <2>形參的類型  <3>形參的順序

多態:同一接口,不同的形態 

new和delete的區別

new 申請內存,調用構造函數。

delete  調用析構函數,釋放內存。

1.new和malloc有什麼區別

2.動態開闢內存

C語言中:

malloc是函數           void* malloc(size_t size)

free是函數               void free(void* ptr)

C++中:

new是關鍵字           malloc是關鍵字

區別:1.new是關鍵字    malloc是函數

2.new再自由存儲區域  malloc在堆上

3.new可以做初始化  malloc單純開闢內存

4.new可以重載    operator new 調用構造

malloc不能重載

5.new可以調用malloc    malloc不能調用new

6.new可以開闢常量    malloc不能開闢常量

const

C語言中:修飾常變量       編譯階段,常變量是否做左值   其他處理和變量是一樣 

const int gdata=10;//global

C++中:修飾常量    不能作爲左值,不能定義數組大小,沒有編譯時期的替換規則。

編譯階段,把用到常量的地方替換成常量初始化的值 

const int gdata=20;//.data1    extern

<1>一定要初始化 (初始化必須寫在構造函數的初始化列表中)

<2>不能做左值    <3>不能間接修改,杜絕間接訪問來修改常量內存的風險

引用&:別名(內存單元的別名)

1.一定要初始化  引用底層是* const指針,必須初始化

2.引用 不能引用 不能取地址的數據

3,引用不能改變(引用一經引用一塊內存,再也不能引用其他內存)

4.引用只能使用,引用變量所引用的數據

inline函數:inline關鍵字修飾的函數成爲內聯函數,是對系統的建議,並不保證一定處理爲內聯。

編譯   函數調用  代碼展開(在編譯階段,在函數調用點將函數的代碼展開,省略了函數棧幀開闢回退的調用開銷,效率比較高)

inline函數和static修飾的函數的區別:

1.inline    無開棧清棧的開銷      static    有

2.inline表示在編譯階段有代碼的展開,內聯函數不產生符號,本文件可見。遞歸,循環等函數結構不可能被處理爲內聯。

static  符號屬性爲1,在文本文件可見,將global變爲local,

inline 和宏的區別

1.inline編譯階段處理,有類型檢查和安全檢查

宏:預編譯階段    無安全檢查

2.inline是一種更安全的宏

inline注意事項:1.inline一般寫在頭文件中   2.inline是給編譯器的一個建議(遞歸i,循環,switch等不會處理)3.inline是基於實現的,不是基於聲明的。

inline的缺點:代碼膨脹爲代價,空間換時間

1.棧的開銷 >執行的開銷      設爲inline

2.棧的開銷 <執行的開銷      不建議inline

函數的默認值:

1.從右往左依次賦予

2.不能重複賦予

3.一般寫在聲明上

C和C++的相互調用

1.C++調用C    使用extern "C",修飾函數聲明

2.C調用C++    <1>C++源文件可修改     C++加  exter "C"    

<2>C++源文件不可修改    加中間層.cpp

3..C被調用    #ifdef_cplusplus

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章