第二章 面向对象的编程风格(提供重载函数)
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');//到底是哪一个呢?
将一组实现代码不同但工作内容相似的函数加以重载,可以让函数用户更容易使用这些函数。如果没有重载机制,我们就得为每个函数提供不同的名称。
现在我们来提供一个通用的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');//到底是哪一个呢?
将一组实现代码不同但工作内容相似的函数加以重载,可以让函数用户更容易使用这些函数。如果没有重载机制,我们就得为每个函数提供不同的名称。
相关文章推荐
- 第二章 面向对象的编程风格(提供默认参数值)
- 第二章 面向对象的编程风格(如何编写函数)
- 第二章 面向对象的编程风格(调用函数)
- 第二章 面向对象的编程风格(使用静态局部变量)
- 第二章 面向对象的编程风格(声明inline函数)
- JAVA——第二章——面向对象的编程概念
- 第五章 面向对象的编程风格(定义一个派生类)
- IME输入法编程: 第二章 Windows9x系统提供的ime管理函数
- C语言实现动态数组(以面向对象的编程风格)
- 【集体智慧编程】第二章、提供推荐
- 集体智慧编程 第二章 提供推荐
- [读书笔记] - <Essential C++> - 第二章: 面向过程的编程风格
- 集体智慧编程----第二章 提供推荐(Making Recommendations)
- 第五章 面向对象的编程风格(定义一个抽象基类)
- 第五章 面向对象的编程风格(面向对象编程概念)
- Essential C++ 第二章,面向过程的编程风格
- 第五章 面向对象的编程风格(面向对象的编程思维)
- 第五章 面向对象的编程风格(不带继承的多态)
- Eclipse设置编程风格
- 重读金典------高质量C编程指南(林锐)-------第二章 程序的板式