重载函数
-
参数列表不相同,可能是参数类型不相同(或者参数个数不相同,都不相同,也可以)的两个或多个函数,可以拥有相同的函数名称;
- 编译器会把实参和每个重载函数的形参比对,找出哪个重载函数合适,所以每个重载函数的参数列表必须和其他的重载函数的不同。(编译器无法通过函数的返回类型区分两个同名函数)
void display_message(char ch);
void display_message(const string& );
void display_message(const string& ,int );
void display_massage(const string& ,int ,int );
模板函数
- 以关键字template开头,其后紧接着(别打空格)< >,尖括号用以表示推迟决定参数的类型;
- function template的参数列表通常都由两种类型构成:
- 明确的类型(已定义好的类型);
- 暂缓决定的类型。
- 标识符扮演占位符的作用,用来放置函数参数列表以及函数体中的某些实际数据类型。
template<typename elemType>
void display_message(const string &msg,const vector<elemType> &vec)
{
cout<<msg;
for(int ix=0;ix<vec.size();ix++)
{
elemType t=vec[ix];
cout<<t<<' ';
}
}
//如何使用
vector<int>ivec;
string mag;
//...
display_message(msg,ivec);
//换个vector<>内的类型
vector<string>ivec;
//...
display_message(msg,ivec);
区别重载函数和模板函数
- 如果函数具备多种实现方式,我们可以将它重载成为承载函数;
- 如果我们希望让程序代码得到主体不变,仅仅改变其中用到的数据类型,可以通过fuction template达到目的;
- 模板函数也可以是重载函数:
//function template进行重载
template<typename elemType>
void display_message
(const string &msg,const vector<elemType> &vec);
template<typename elemType>
void display_message
(const string &msg,const list<elemType><);
//list是C++标准库提供的另一种标准容器