C++總複習--2--C++程式設計--C/C++區別

2020-08-11 18:15:19

C++總複習--2--C++程式設計--C/C++區別

1.new和malloc的區別

2.過載函數(重定義),C++函數符號的生成規則

3.參照與指針的區別

4.inline函數的特點,與宏,普通函數,static修飾的函數的區別

5.C/C++的相互呼叫

6.const用法


1.new和malloc的區別

(1)new關鍵字            malloc函數

(2)new系統計算大小      malloc程式設計師設計

(3)new返回值型別安全    malloc返回值型別不安全

(4)new還可以做初始化    malloc只開闢記憶體

(5)new[]  陣列個數       malloc總大小

(6)new  自由儲存區域    malloc堆

(7)記憶體申請失敗

     new拋出bad_alloc     malloc返回NULL

(8)new關鍵字可以過載   malloc不能過載     operator new  開闢記憶體

2.函數過載

  (1)同名(2)不同參數(3)同一作用域

   C++的函數符號生成規則支援

  函數返回值如果不同,不能構成過載

C++三大特徵:  封裝  繼承  多型

多型    靜多型:編譯確定函數呼叫

                   函數過載  模板   

          動多型: 執行確定函數呼叫

                  繼承和虛擬函式

重寫和重定義區別:

同名函數:

(1)過載   重定義

(2)隱藏

(3)覆蓋   重寫

3.參照和指針的區別

 參照就是起  別名

底層以指針的形式來實現的

參照的特點:(1)參照一定要初始化

                     (2)參照是不能改變的

                     (3)參照是不能取地址的數據

                     (4)參照變數只能使用所參照的記憶體單元

4.inline函數

函數的呼叫點程式碼直接展開

特點:沒有開棧和清棧的開銷    效率高    本檔案可見

         (1)inline函數和普通函數區別,就是特點

         (2)inline函數和static修飾的函數的區別

                    inline函數程式碼直接展開;static  g==>l

        (3)inline函數和宏的區別

                    inline函數   編譯      安全檢查和型別檢查

                    宏               預編譯    沒有

                    Inline是一種更安全的宏

Inline缺點:

        程式碼膨脹爲代價,以空間換時間的概念

建議:函數執行的開銷   >    函數開棧的開銷      建議用inline函數

特徵:

       (1)inline 寫在.h

       (2)Inline只在Release版本生效

       (3)Inline只是給編譯器的一個建議    回圈   遞回

       (4)Inline基於實現,不是基於宣告

5.C/C++區別

      (1)C++呼叫C

在C++中:

extern "C"

{

}

包含的程式碼以C語言的規則來進行處理

      (2)C呼叫C++    C++程式碼允許修改和不允許修改兩個方面講

6.const用法

C:

      const修飾的變數  常變數

      編譯檢視常變數有沒有做左值,其他的處理方式和變數相同

C++:

      const修飾的變數   常數

      編譯把用到常數的地方替換成常數初始化的值

     (1)常數一定要初始化

     (2)常數不允許修改

             (2.1)直接修改

             (2.2)間接修改

C++  中const的用法

      (1)const變數

               (1.1)全域性變數     const  int  gdata  =  10;//l  本檔案可見

               (1.2)區域性變數     const  int  ldata  =  20;//常數  函數中

               (1.3)成員變數     const  int  mdata  =  20;//類中

     (2)const類成員方法

             常方法   type* const this  

                      cosnt  type* const this

             常物件只能呼叫常方法