C++基礎學習筆記:函式
阿新 • • 發佈:2019-01-07
//!時間:2017年9月9日(週六)夜 //!內容:C++函式基礎 //!最後更改時間:10分鐘之後,汗! #include <iostream> #include <string> #include <cassert> using namespace std;//偷懶 int funcOne(int);//函式原型宣告,可以省略形參名 void swapOne(int i, int j); void swapTwo(int *i, int *j); void swapThree(int &i, int &j); void strTest(const char *str); void strTest(const char str[], int n); void strTest(const string str); template <typename T>//or:template <class T> void myswap(T &i, T &j); int main() { //1.函式的定義:宣告、定義、呼叫 int numReturn = funcOne(1);//函式的呼叫
//2.函式指標與指標函式;略(見C++指標筆記)
//3.引數傳遞 int numOne = 1, numTwo = 2; swapOne(numOne, numTwo);//值傳遞,不改變實參 //swapTwo(&numOne, &numTwo);//指標傳遞,會改變 swapThree(numOne, numTwo);//引用傳遞,會改變 cout << numOne << "-" << numTwo << endl; //*返回與引數列表類似,注意不能返回區域性變數的引用 //*引數限定為const可以避免對引數無意的修改 //字元陣列、C風格字串與string型別的引數:陣列名是首地址 char cStr[10] = "A test!"; char *pStr = "B test!"; string sStr = "C test!"; strTest(cStr);//or:strTest(pStr); strTest(pStr, 7);//or:strTest(cStr, 7); strTest(sStr);
//4.函式過載:(見3.strTest)
//5.模板函式 //如3.中的swap函式是以整形的引數,而模板允許以任意型別來定義函式 int iOne = 1, iTwo = 2; float fOne = 1.1, fTwo = 2.2; myswap(iOne, iTwo);//例項為int myswap(fOne, fTwo);//例項為float cout << iOne << "--" << fOne << endl;
//6.行內函數:inline與函式定義放在一起 //inline對於編譯器來說只是一個建議,編譯器會自動進行優化。 //當inline中出現了遞迴,迴圈,或過多程式碼時,編譯器自動無視inline宣告,同樣作為普通函式呼叫。
system("pause"); return 0; }//!main() end; //函式定義 //<返回型別><函式名>(<引數列表>){函式體} int funcOne(int i) { return i * 10; }
void strTest(const char *str) { if (str == nullptr) assert("null..."); while (*str) cout << *str++; } void strTest(const char str[],int n)//防止越界操作 { for (int i = 0; i < n; i++) cout << str[i]; } void strTest(const string str) { cout << str; }
void swapOne(int i, int j) { int temp = i; i = j; j = temp; } void swapTwo(int *i, int *j) { int temp = *i; *i = *j; *j = temp; } void swapThree(int &i, int &j) { int temp = i; i = j; j = temp; } template <typename T>//or:template <class T> void myswap(T &i, T &j) { T temp = i; i = j; j = temp; }