1. 程式人生 > 實用技巧 >行內函數和函式過載

行內函數和函式過載

行內函數,是為了解決程式中函式呼叫的效率問題。函式重載允許程式設計師定義函式時使用相同的函式名,以不同資料型別的資料作為形參,實現相似功能的函式。

行內函數

呼叫函式時,系統要將程式當前的一些狀態資訊、斷點資訊儲存到堆棧中,同時轉到被調函式的程式碼處去執行函式體語句,這些引數儲存與引數恢復的過程需要時間和空間開銷,使程式執行效率降低。為此才引入行內函數。
行內函數也稱為內嵌函式,在使用行內函數時,C++編譯器直接將被調函式的函式的程式碼插入到呼叫該函式的語句處,在程式執行時不再進行函式呼叫和返回,從而消函式呼叫和返回的系統開銷,提高了程式執行效率

格式inline 型別識別符號 函式名(引數列表)
行內函數的定義與普通函式基本相同

,只是在函式定義前加上關鍵字inline。

例項

#include<iostream>

using namespace std;

inline double sqr(double x)

{

return x * x;

}

inline double cube(double x)

{

return x * x*x;

}

int main()

{

double x;

cout << "請輸入一個數據" << endl;

cin >> x;

cout << "square of" << x << "
=" << sqr(x) << endl; cout << "cube of" << x << "=" << cube(x) << endl; system("pause"); return 0; }

行內函數不同於一般函式呼叫,主要體現在是程式碼替換而不是呼叫,減少了函式呼叫時的系統開銷,提高了效率

注意:(1)行內函數的函式體內不允許有迴圈語句和開關switch語句。如果行內函數內含有這些語句,則按普通函式處理。
(2)行內函數的函式體內不能包含任何靜態變數和陣列說明,也不能有遞迴呼叫。
(3)行內函數的函式體中語句不宜過多,一般以1-5行為宜。

函式過載

C++中允許兩個或兩個以上的函式在定義時重名,但要求函式的引數列表不同,如引數的型別不同、引數的個數不同等。這種共享同名函式的定義稱為函式過載。過載函式的意義在於,可以用同一個函式名字定義和呼叫多個功能相近的函式,編譯器能夠根據函式引數的具體情況決定呼叫哪個函式。

例項使用函式過載的方法,設計兩個求面積的函式:
area(float r);//求圓面積,需傳遞一個引數

area(floatx,floaty);//求矩形面積,需傳遞兩個引數

#include<iostream>
using namespace std;
const double PI = 3.14159;
double  area(float r)
{
    return (PI*r*r);
}
double  area(float x,float y)
{
    return (x*y);
}
int main()
{
    float r,a,b;
    cout << "輸入圓的半徑" << endl;
    cin >> r;
    cout << "圓的面積:" << area(r) << endl;
    cout << "輸入矩形長寬" << endl;
    cin >> a>> b;
    cout << "矩形的面積:" << area(a, b) << endl;
    system("pause");
    return 0;
}

注意:(1)過載函式的區別不能只是函式的返回值不同個,應至少在形參個數,引數型別,引數順序上有所不同。

(2)應使所有的過載函式的功能相同。