目录
函数模板
概念:为了代码复用;通用的代码不必受数据类型的限制。那么我们可以把数据类型改为一个设计参数。
函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,简化重载函数的设计。
函数模板定义如下:
template<模板参数表>
返回类型 函数名(形式参数表)
{
.......;//函数体
}
template<class T>
T my_max(T a,T b)
{
return a>b?a:b;
}
int main()
{
int x=my_max(12,23);
char ch=my_max('a','b');
double dx=my_max(34.45,12.23);
cout<<"x= "<<x<<endl;
cout<<"ch= "<<ch<<endl;
cout<<"dx= "<<dx<<endl;
return 0;
}
思考:其实就相当于是函数的重命名 typedef 而不是简单的替换。
以上代码在编译时,每执行一次就编译生成不同的代码。实行的是函数的模板推演
当变成如下代码时,就会出现函数的二异性
int x=my_max(12,'a') //函数无法进行模板推演
名字空间:namespace
概念:在c++中支持三种域:局部域、名字空间域和类域
名字空间域是随标准c++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:
意义:主要是解决全局名字污染问题
namespace yhp
{
int g_max=10;
float g_ip=3.14;
void func()
{
}
namespace HP
{
int g_min=10;