天天看點

C++ c到c++C到C++

C到C++

C++相比C語言來說,多了兩個核心,五個内容:
		1、面向對象的思維;2、模闆(泛型編型)
		1.bool 2.引用 3.内聯 4.重載 5.預設參數
           

變量

資料類型 bool

  • 布爾 占1個位元組 取值:true false
    bool isMax(int a, int b)
      {
      	return a > b;
      }
               

引用 為變量取别名

  • typedef int HP;//為類型取别名
  • *三種:乘号,解引用,指針
  • &三種:位與,取位址,引用
    void mySwap(int a, int b)//值傳遞
     {
     	int temp = a;
     	a = b;
     	b = temp;
     }
    
     void mySwap(int *pa, int *pb)//址傳遞
     {
     	int temp = *pa;
     	*pa = *pb;
     	*pb = temp;
     }
    
     void mySwap(int &a, int &b)//引用傳遞
     {
     	int temp = a;
     	a = b;
     	b = temp;
     }
               
  • 函數的值拷貝,如果是一個結構變量,盡量使用指針
  • 在C++裡面,除了指針拷貝之外,還可以使用引用。使用指針和引用效率是一緻
  • 指針和引用的差別:
    1、指針是一個有記憶體的實體,引用隻是一個外号
    2、引用是常量,常量必須初始化指派
    3、指針可以賦空
    4、指針記憶體唯一,引用不唯一
               

函數

内聯函數

  • 通過記憶體膨脹來減少函數的跳轉

    函數前面加關鍵字inline (空間換時間)

    inline int myAdd(int a, int b)
      {
      	return a + b;
      }
               
  • 内聯的缺點
    1、如果函數内的函數體代碼比較長,不建議内聯
      2、函數體内有循環,不建議内聯什麼時候用内聯:簡單的指派語句,及傳回資料(函數體極少,使用頻率高,用内聯)
    
    
    
      int playHp = 0;
      inline int GetIndex(int num)
      {
      	return num % 10;
      }
    
      inline void SetValue(int v)
      {
      	playHp = v;
      }
               

函數重載

  1. 函數

    把代碼的子產品化為工具,以此增加代碼的複用性

    int myAdd(int x,int y)//計算兩整型資料和的工具函數
     {	
     	return x+y;	
     }
               
  2. 函數重載

    一個函數名對應多個函數體,什麼情況下構成重載:滿足兩個條件:

    -函數名一緻

    -參數清單不一緻

    1.參數對應位置類型不同
     2.參數的個數不同
               
    例如
    int myAdd(int x,int y)   double myAdd(double x,double y)   int myAdd(int x,int y,int z)
     {                        {                                 {
         return x+y;                 return x+y;                    return x+y+z;
     }                        }                                 }
               
    注意:和函數傳回值沒有關系
  3. 重載的應用
    #include<iostream>
     using std::cout;//using namespace std;
     using std::endl;//前一種命名空間方式要安全
     int myAdd(int x,int y)
     {
         return x+y;
     }
     double myAdd(double x,double y)
     {
         return x+y;
     }
     int myAdd(int x,int y,int z)
     {
         return x+y+z;
     }
     int main()
     {
     	cout<<myAdd(1,2)<<endl;
     	cout<<myAdd(1.1,2.2)<<endl;//注意小數在編譯過程中,會被看作double類型,float類型需要在小數後加f
     	cout<<myAdd(1,2,3)<<endl;	
         return 0;
     //使用重載函數時,注意類型轉換帶來的錯誤
     }
               

函數預設參數

  1. 預設參數

    函數在定義形參時給出初始值

    int myMul(int x,int y=9)
     {
         return x*y;
     }
               
  2. 注意事項

    -參數的預設隻能從後往前,依次預設,不能從前往後

    int myMul(int x,int y=9,int z)
     {
     	函數體
     }
     //錯誤的寫法
               
    -參數的預設,在隻有定義的情況下可以在寫在定義上,如果有聲明,隻要在聲明中預設,不要在定義中預設
    #include<iostream>
     using std::cout;
     using std::endl; 
     int myMul(int x,int y=9);//函數聲明
     int main()
     {
     	cout<<myMul(4)<<endl;
         return 0;
     }
     int myMul(int x,int y=9)//函數定義
     {
     	return x*y;
     }
     //編譯報錯:重定義預設參數 : 參數 2
               
    -函數的參數預設與重載混合使用時,一定要注意參數預設導緻重載的二義性
    #include<iostream>
     using std::cout;
     using std::endl;
     int myMul(int x,int y)
     {
     	return x*y;
     }
     int myMul(int x,int y,int z=9)
     {
     	return x*y*z;
     }
     int main()
     {
     	cout<<myMul(2,3)<<endl;
    
     	return 0;
     }
     //提示錯誤:對重載函數的調用不明确
               
  3. 預設參數的應用
    #include<iostream>
     using std::cout;
     using std::endl; 
     int myMul(int x,int y=9)
     {
     	return x*y;
     }
     int main()
     {
     	cout<<myMul(4)<<endl;
     	cout<<myMul(4,6)<<endl;//6會覆寫9
         return 0;
     }
               

繼續閱讀