【C++】函数的设计与使用(三)重载函数、模板函数

重载函数

  • 参数列表不相同,可能是参数类型不相同(或者参数个数不相同,都不相同,也可以)的两个或多个函数,可以拥有相同的函数名称;
  • 编译器会把实参和每个重载函数的形参比对,找出哪个重载函数合适,所以每个重载函数的参数列表必须和其他的重载函数的不同。(编译器无法通过函数的返回类型区分两个同名函数)
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的参数列表通常都由两种类型构成:
    1. 明确的类型(已定义好的类型);
    2. 暂缓决定的类型。
  • 标识符扮演占位符的作用,用来放置函数参数列表以及函数体中的某些实际数据类型。
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);

区别重载函数和模板函数

  1. 如果函数具备多种实现方式,我们可以将它重载成为承载函数;
  2. 如果我们希望让程序代码得到主体不变,仅仅改变其中用到的数据类型,可以通过fuction template达到目的;
  3. 模板函数也可以是重载函数:
//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>&lt);
		            //list是C++标准库提供的另一种标准容器

你可能感兴趣的:(C++基础,c++,笔记)