C++Primer第五版 6.6节练习

练习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;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值