内联函数,是为了解决程序中函数调用的效率问题。函数重载允许程序员定义函数时使用相同的函数名,以不同数据类型的数据作为形参,实现相似功能的函数。
内联函数
在调用函数时,系统要将程序当前的一些状态信息、断点信息保存到堆栈中,同时转到被调函数的代码处去执行函数体语句,这些参数保存与参数恢复的过程需要时间和空间开销,使程序执行效率降低。为此才引入内联函数。
内联函数也称为内嵌函数,在使用内联函数时,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(float x,float y); //求矩形面积,需传递两个参数
#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)应使所有的重载函数的功能相同。