函数调用及功能的弹性扩展(默认参数)
设置默认形参增加函数的弹性
函数1:
void display(const vector<int> &ivec)
{
for(int ix=0;ix!=ivec.size();++ix)
cout<<ivec[ix]<<" ";
}
分析:
此函数非常霸道的将输出绑定到cout对象上,只能输出到屏幕上;
改进:
通过给函数添加ostream参数,可选择输出到屏幕上还是文件中,设置其默认值为cout,表明默认输出至屏幕上;
void display(const vector<int> &ivec,ostream &os=cout)
{
for(int ix=0;ix!=ivec.size();++ix)
os<<ivec[ix]<<" ";
}
技巧:
将ostream &os作为形参传递,并设默认值为cout,增加输出目的地的弹性选择,即用户指定输出至屏幕上还是文件中;
函数2:
void func_vec(const vector<int> &ivec,ofstream *ofil=0)
{
//操作ivec
if(!ofil)
(*ofil)<<...
}
分析:
将ofstream *ofile作为参数,并设默认值为0,可以弹性选择是否将信息输出到文件中,使用户有权利将输出信息关闭掉;
注:
此处必须为ofstream *类型而不能为 ofstream &类型,因为pointer类型可以设为零,来实现关闭输出信息的效果,而reference无法设为零,因此,reference一定的代表某个对象;故当需要选择打开or关闭流时传递ofstream *类型,当需要选择将流关联到屏幕or文件时传递参数ostream &;
结论:
1.指针做形参的小技巧;
2.当我们为某个参数提供了默认值,则这个参数右侧的所有参数都必须具有默认参数值;
3.默认值只能指定一次,可以在函数声明出,也可以在函数定义处,但不能两个地方都指定;