您的位置:首页 > 编程语言

第二章 面向对象的编程风格(提供重载函数)

2015-05-08 20:29 183 查看
2.6提供重载函数

现在我们来提供一个通用的display_message()函数[重载函数],取代原先让每个函数自行产生调试的信息方式。

我们可以这样使用:

bool is_size_ok(int size)

{

const int max_size=1024;

const string msg("requested size is not supported");

if(size<=0||size>max_size)

{

display_message(msg,size);

return false;

}

return true;

}

程序:第一章的程序也可以用它来显示欢迎信息:

const string

greeting("hello,welcome to guess the numeric sequence");

display_message(greating);

并用它来显示数列的两个元素值:

const string seq("the two elements of the sequence are");

disolay_message(seq,elem1,elem2);

或仅仅以display_message()来输出换行符或者是制符表

diplay_message('\n');

display_message('\t');

程序:我们是否可以传入不同类型甚至数量不同的参数给display_message()呢?可以。如何办到,这必须要通过所谓的函数重载机制。

参数列表不相同(可能是参数类型不同也可能是参数个数不同)的两个或者多个函数,可以拥有相同的函数名。以下便是我们希望的四个display_message()函数的重载声明:

void display_message(char ch);

void display_message(const string&);

void display_message(const string&,int);

void display_message(const string&,int,int);

既然名称相同,编译器如何得知使用哪一个函数呢?它会将调用者提供的实际参数列表必须和其他重载函数的不同原因。

编译器无法根据函数的返回类型区分具有相同名称的函数。以下写法是不正确的,会产生变异错误:

//错误:参数列表必须不同(而非返回类型)

ostream&display_message(char ch);

bool display_message(char ch);

为什么返回类型不足以将函数重载呢?因为返回类型无法保证提供我们一个足以区分不同重载函数的语境。列如编译器无法判断以下函数调用操作究竟想要调用哪一个函数:

display_message('\t');//到底是哪一个呢?

将一组实现代码不同但工作内容相似的函数加以重载,可以让函数用户更容易使用这些函数。如果没有重载机制,我们就得为每个函数提供不同的名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: