提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
函数与c语言不同的地方:
一、函数可以带参数
1.如果某个位置已经有了默认参数,那么从这个位置之后,从左向右必须有默认值
2.如果函数声明有默认参数,函数实现就不能有默认参数(声明和实现只能一个有默认参数)
二、函数占位参数
1.占位参数也可以有默认参数
三、函数重载
一、函数模板
template <typename T>
void buble_sort(T *p,int len)
{
int i = 0;
int j = 0;
for(i=0;i<len-1;++i)
{
for(j=0;j<len-i-1;++j)
{
if(p[j]>p[j+1])
{
T temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
}
template <typename T>
void print_array(T *p,int len)
{
int i = 0;
for(i=0;i<len;++i)
{
cout<<p[i]<<endl;
}
}
template <typename T,P>
auto add(T a,P B)->decltype(a+b)
{
return a+b;
}
int main()
{
double a[6]={1,2,34,6.8,6,7};
buble_sort(a,6);
print_array(a,6);
cout << "Hello World!" << endl;
return 0;
}
注意:
(1)所有的函数模板都要存放在头文件。
(2)如果有具体的函数与函数模板相同,优先调用函数其次是模板
(3)函数模板输入两种类型输出冲突
decltype(1+1.1) a;
template <typename T,P>
auto add(T a,P B)->decltype(a+b)
{
return a+b;
}
二、类模板
使用类模板使用户可以为类定义的一种模式,是的类中的某些数据成员,某些成员函数的参数,返回值或局部变量能取任意类型。
将类成员函数中的数据成员,改为模板中T数据类种,所有的外部定义的函数都要加模板,函数都变成声明。