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; }
函數重載
-
函數
把代碼的子產品化為工具,以此增加代碼的複用性
int myAdd(int x,int y)//計算兩整型資料和的工具函數 { return x+y; }
-
函數重載
一個函數名對應多個函數體,什麼情況下構成重載:滿足兩個條件:
-函數名一緻
-參數清單不一緻
例如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; } } }
- 重載的應用
#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; //使用重載函數時,注意類型轉換帶來的錯誤 }
函數預設參數
-
預設參數
函數在定義形參時給出初始值
int myMul(int x,int y=9) { return x*y; }
-
注意事項
-參數的預設隻能從後往前,依次預設,不能從前往後
-參數的預設,在隻有定義的情況下可以在寫在定義上,如果有聲明,隻要在聲明中預設,不要在定義中預設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; } //提示錯誤:對重載函數的調用不明确
- 預設參數的應用
#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; }