目录
内置函数定义
编译时将所调函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数的函数称为内置函数,又成为内嵌函数。有的书翻译成内联函数。
指定内置函数的方法
指定内置函数的方法,只需在函数首行的左端加一个关键字inline即可。
代码实例:
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
inline int max (int, int, int);
int main(int argc, char** argv)
{
int i= 10,j = 20 ,k = 30;
int m = max (i,j,k);
cout <<"max = " << m << endl;
return 0;
}
inline int max (int a,int b, int c)
{
if(b>a) a= b ;
if(c>a) a=c ;
return a;
}
程序结果及分析:
由于定义函数时指定它为内置函数,因此编译系统在遇到函数调用“max(i,j,k)"时,就用max函数体的代码替代”max(i.j,k),同时将实参代替形参。
这样,程序就被替换成:
if (j > i) i = j; if (k > i) i = k ; m=i;
可以只在函数声明的时候写inline ,也可以在声明函数和定义函数同时写inline,只要在调用函数之前把inline的信息告诉编译系统,编译系统就会按照内置函数处理。
优缺点:
使用内置函数可以节省运行时间,但是会增加目标代码的长度,内置函数中不能包括复杂的控制语句,如循环语句,switch语句等。
只有那些规模小而又被频繁调用的简单函数,才适合声明为inline 函数。
函数的重载
定义
C++允许用同一个函数名定义多个函数,而这些函数的参数个数和参数类型可以不相同,这就是函数的重载,即对一个函数名重新赋予它新的含义,使一个函数名可以多用,所谓重载就是“一物多用“。
代码实例:
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int max (int a,int b, int c); //函数声明
int max (int a,int b) ; //函数声明
int main(int argc, char** argv)
{
int a = 8,b=-12,c= 27;
cout << "max(a,b,c) = "<<max(a,b,c) << endl;
cout << "max(a,b) = " << max(a,b)<< endl;
return 0;
}
int max (int a,int b, int c)
{
if(b>a) a= b ;
if(c>a) a=c ;
return a;
}
int max (int a,int b)
{
if
(a>b) return a;
else return b;
}
程序结果及分析:
两次调用max函数,系统根据参数的个数找到与之匹配的函数,重载函数的参数个数和参数类型或参数顺序三者中至少又一种不同,函数返回值类型可以相同也可以不同。
在使用重载函数时同名函数应该相同或者相近。
函数模板
所谓函数模板,实际上时建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。凡是函数体相同的函数 都可以用这个模板来代替,不必定义多个函数,只须在模板中定义一次即可,在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同的函数功能。
声明方式:
template <typename T> 或 template <class T>
class和typename的作用相同,都是表示类型名,可以互换,typename 是不久前才被才被加到c++标准中的,是类型名。
代码实例:
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
template <typename T>
T max(T a,T b,T c)
{
if(b>a) a= b ;
if(c>a) a=c ;
return a;
}
int main(int argc, char** argv)
{
int i1 = 10,i2 = 20 ,i3 = 30,i;
double d1=56.87,d2=90.23,d3=-3214.78,d;
long g1=67854,g2=-912456,g3=673456,g;
i = max(i1,i2,i3); //调用此模板,此时T被替换成int
d = max(d1,d2,d3); //调用此模板,此时T被替换成double
g = max(g1,g2,g3); //调用此模板,此时T被替换成long
cout <<"i_max = " << i << endl;
cout <<"d_max = " << d << endl;
cout <<"g_max = " << g << endl;
return 0;
}
程序结果及分析: