练习6.49:什么是候选函数?什么是可执行函数?
答:候选函数:函数匹配的第一步是选定本次调用对应的重载函数集,集合中的函数称为候选函数。
可行函数:从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数。
练习6.50:已知有第217页对函数f的声明,对于下面的每一个调用列出可行函数。其中哪个函数是最佳匹配?如果调用不合法,是因为没有可匹配的函数还是因为调用具有二义性?
(a) f(2.56, 42)
(b) f(42)
(c) f(42,0)
(d) f(2.56,3.14)
答:声明如下:
void f();
void f(int);
void f(int, int);
void f(double,double = 3.14);
a. f(2.56,42)
//可行函数 void f(int, int); //2.56可以转化int即2
//可行函数 void f(double, double)
//产生二义性错误2.56double精确匹配,42 int精确匹配
b. f(42)
//可行函数, void f(int)
//可行函数 void f(double, double) ,相当于 f(42,3.14)
//最佳匹配 void f(int)
c. f(2.56,3.14)
//可行函数 void f(int, int); //2.56可以转化int即2, 3.14转化为 int即3
//可行函数 void f(double, double)
//最佳匹配void f(double, double)
练习6.51:编写函数f的4个版本,令其输出一条可以区分的信息。验证上一个练习的答案,如果你回答错了,反复研究本节的内容知道你弄清楚自己错在何处。
答:见云盘程序,和上一题全符合
练习6.51
/*
*练习6.51
*2015/6/25
*问题描述:练练习6.51:编写函数f的4个版本,令其输出一条可以区分的信息。验证上一个练习的答案,如果你回答错了,反复研究本节的内容知道你弄清楚自己错在何处。
*功能:比较
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*
*/
#include <iostream>
using namespace std;
void f()
{
cout << "call f()... " << endl;
}
void f(int a)
{
cout << "The value is:" << a << endl;
cout << "call void f(int)..." << endl;
}
void f(int a, int b)
{
cout << "a is:" << a << " b is:" << b << endl;
cout << "call void f(int, int)..." << endl;
}
void f(double a, double b = 3.14)
{
cout << "a is: " << a << " b is:" << b << endl;
cout << "call void f(double, double)..." << endl;
}
int main()
{
//#ifndef NDEBUG
//f(2.56, 42); no macthing for call to f(double ,int)
//cerr << __func__ << "may occurs something wrong!" << endl;
//#endif
f(42);
f(42,0);
f(2.56,3.14);
return 0;
}