C++學習筆記(二)——函式

自我淨化發表於2020-10-17

三、函式

1、函式三要素

  • 返回值型別
  • 函式名
  • 引數列表

2、書寫自定義函式

//函式原型
int sum(int, int);
//主函式,返回值為int型別
int main()
{
     //函式呼叫
     int result = sum(5,3);
}
//函式定義
int sum(int num1, int num2)
{
     //函式實現的程式碼
}

注:

  • 函式原型與函式定義的頭部類似,最後以分號結尾
  • 函式原型中的引數名稱可以省略,只寫引數型別
  • C++中返回值型別不能是陣列,但可以是其他任何型別(可以將陣列作為結構或物件組成部分返回

3、按值傳遞

——給函式傳遞變元(引數)時,引數值不會直接傳遞給函式,而是先製作引數的副本,儲存在棧上,再使這個副本可用於函式,而不是使用初始值。

4、函式指標

  • 函式指標是什麼?
    函式的指標是儲存其機器語言程式碼的記憶體開始地址
  • 函式指標的好處是什麼?
    可以在不同的時間使用不同的函式。
  • 函式指標的宣告
//函式原型
double sum(double, double);
//函式指標宣告
double(*ptrSum)(double, double)

注:

  • 該語句宣告瞭一個指標ptrSum,指向一個函式
  • 注意區分double *ptrSum(double, double),不是函式指標,而是宣告瞭一個函式ptrSum,返回double *型別

5、行內函數(inline)

  • C++為提高程式執行速度所做的一項改進;
  • 與常規函式的編寫方式不同——在函式宣告和定義前加關鍵字inline;
  • 適用於簡單頻繁呼叫的函式。

6、函式過載(overload)

——函式名相同,引數列表不同(特徵標不同)。
例:嘴巴

//嘴可以
//幹吃
void eating();
//吃東西
void eating(string);
//吃很多東西
void eating(string[]);
//定個日子吃
void eating(int, int, int);
//...

7、函式模板

什麼是函式模板?
——所謂函式模板,實際上就是建立一個通用函式

  • 函式定義時不指定具體的資料型別(使用虛擬型別代替);
  • 函式被呼叫時編譯器根據實參反推資料型別——型別的引數化
//模板頭與函式宣告/定義永遠是不可分割的整體!
template<typename 型別引數1, typename 型別引數2, ...>
返回值型別 函式名(形參列表)
{
     //在函式體中可以使用型別引數
}

//例:使用模板技術實現變數交換值
//函式宣告
template<typename T> void Swap(T&, T&);
//模板頭
template<typename T>
void Swap(T &a, T &b)
{
     T temp = a;
     a = b;
     b = temp;
}

相關文章