函数重载与参数缺省值共用可能引起两意性

函数的重载与函数的参数缺省值都使得程序的设计和书写与人类的自然语言更接近,极大地方便于我们面向对象。但是,如果把这二者合起来用,却又可能会发生两意性问题。让我们观察下面的例子:

例2‑2:

#include <iostream.h>

void fun()

{       cout<<”ok”;

}

void fun(int i =0)

{       cout<<i<<endl;

}

int main()

{       fun(5);

fun();   //编译指出此语句有两意性

return0;

}

对于主函数的第一条语句,fun(5)有一个实参,它仅仅完全匹配有一个形数的函数void fun(int i=0),此语句正确。

对于主函数的第二条语句,fun()没有实参,因此,它完全匹配无参数的函数void fun();然而,它同时又能匹配有一个形参默认值的函数void fun(int i=0)。现在,一个函数调用语句能同时匹配两个函数,因此程序发生了两意性错误。

函数重载与引用传参共用可能引起两意性

注意,下面两个reset函数是不能重载的

1.值传参方式(非指针、非引用)

void reset( Coordinate  loc)

{..... };

2.引用传参方式

void reset( Coordinate  &loc)

{ .....

};

因为当用下面语句

Coordinateobj;

reset(obj);

调用时上述两个reset函数将同时符合调用条件,因而发生两意性。

----------------------------------------------作者声明-----------------------------------------

我是一个老头,65岁,编过10年程序,在大学教过15年书,写了一本书,名为《C++释难解惑》,这几年来一直在投稿。出版社对我的书稿评价很好,但他们就是由于经济上的风险。总是在出版的最后关头反悔。其中北京****出版社已经签字画押的情况下反悔;北京****出版社与我签过电子合同;书稿在**大学出版社放了9个月,还让我请名人写序言,最后说现在书很难卖,并且还给我发了个近半年的图书销售的excel文档让我看,希望我理解出版社。我只好仰天嗟叹了。

有编辑朋友建议我把书稿放到网上让读者试读,以印证读者的人数和满意度。我想这是一个办法,即使永远不能出版,也不至于烂在肚子里。并且我在网上也看到这个办法成功的先例,例如《C语言深度解剖》,后来就由北航出版社出版了。

《C语言深度解剖》的作者采用的方法是把书稿上传到网上。我想采用化整为零的方法,每周起码在我的CSDN博客里发一篇文章,是书稿里的内容稍加改造的。之所以这样做确实出自于私心,就是想借此赚取CSDN的积分。因为我以前忙于教书,无暇经常光顾CSDN,所以几乎没有积分,这样是不能被大家所认识的。

博文与书稿上的文字可能有极少的字面上的不同。

如果您对我的书稿和博文感兴趣,请您推荐给您的朋友,谢谢。

本书稿已经国家版权保护中心进行了作品登记,登记号为:2010-A-023237。

下面我把一些出版社给我的来信摘录作为参考。您可以看到,我的书名在不同的出版社和编辑面前改了好几次名了,现在书稿的名字是我自己的。

//-----------------------------------以下是**大学出版社编辑的来信---------

陈老师,

选题我暂以《C++释疑解惑:课本没讲透的131个问题》的名字报上去了。通过审批应该问题不大。下面几点,是咱们电话里说过的,麻烦你着手进行啊:)

//-----------------------------------------------------------------------------------------------------------

陈老师好

从您的来信,我觉得您的文字驾驭能力挺好的,如果您的书,能写成您给我来信的风格,也不错,现在市场上还就缺这样的书。那种一步步讲操作,枯燥的原理,确实没人愿意看,而那种语言比较生动,穿插一些开发故事,体会心得之类的文风,让冰冷的技术活了起来,容易引起读者的共鸣。所以,建议书至少300页,写得生动些,多配些图,甚至每章最后都可以增加上一些问答,比如您历年教学收集到的经典问题等等。当然,其他的一些方法,也都可以尝试,我这里只是抛砖引玉。

//----------------------------------------------------------------------------------------------------------

尊敬的陈老师:您好!

由于负责这本书的编辑已经离职,这本书现由我负责与您沟通及出版事宜。

这本稿件从市场上鲜有的写作角度出发,揭示了C++的很多难点,有些内容具有一定的深度,同时又力求在写作上深入浅出,会有一定量的读者关注书中的问题,这是本书的一大特色。

//-------------------------------------------------------

陈老师:您好!

今天,就这部书稿又与领导进行了沟通。从这部书稿可看出,其中积淀了您多年的经验和大量心血,力图为读者学习C++排疑解惑,实属难能可贵。

从现在的销售数据(开卷数据:专门的图书销售调查数据,采集自全国2000多家书店,随邮附上)看,目前市场上同类书整体销量不理想(月销200本以上较好),即便在这样的数据面前,相对好销的书还属于基础入门的书或教材。在此,也冒昧地想和您探讨,如何将此书出销好的办法,比如:您能帮助出版社做哪些宣传推广,或者利用院校资源推广销售,以及在零售书店怎样做宣传,才能让读者广泛知晓本书并认可,从而形成销售。

//------------------------------------------------------------------------------------------

陈老师:您好!

从来信看到您对开卷销售数据进行了详细分析,相信您也看出零售图书市场的销售状况,即便是第1名的图书也不过160本/月,假设书店与网店销量平分秋色,每月的总销量也只有320本,一年的销量为3840册,按计算机书的平均销售周期一年半计算,预计为5760册(纯零售不包括教材)。以此推算,当月销量在100本的书,预计3600册。这个销量如果没有教材的销量支撑,从出版社的成本计算基本上是没有什么利润的,如果计算上在途、退货等因素,稍有不慎恐怕就会亏本,这基本上就是纯零售书的状况。

信中提到的几位作者的书,销量多则50多本,少则几本,如果纯靠零售销售的话,简单可以看出最终销量的情况。

社里对您这本书的含金量一直都是肯定的,只是苦于店销图书的销售状况,也深知您的身体状况在写作上将要付出的巨大努力,觉得再让您改稿实在是有些不合适。

//-------------------**大学出版社电子出版物编辑的来信--------------------------

陈老师您好:

我与图书编辑沟通了,就如您告诉我的,他对本书的质量不持疑义,主要考虑的是本书的经济效益。我们作为电子出版和网络出版部门,还没出过单独的网络出版物,这条路暂时不考虑。电子出版物5000左右的成本,包括生产成本和人力成本,要保证持平的话,恐怕要由作者承担。这是我向领导报选题时的一项。您作为作者,据我理解,如果没有相关经费支持,由您个人承担是有问题的。所以这个选题的前景还要您考虑。

------------------------------------------------------------------------------------------------------------

参考书目

1.   [美]Ted Faison,Borland C++3.1编程指南,蒋维杜等译,清华大学出版社,1993

2.   侯俊杰,深入浅出MFC,华中科技大学出版社,2001

3.   [美]Jess Liberty,21天学通C++,人民邮电出版社,2002

4.   [美] Stanley B.Lippman,深度探索C++对象模型,侯捷译,华中科技大学出版社,第1版 2007  

5.   张海藩等,软件工程,人民邮电出版社2010

6.   宛延闿,C++语言和面向对象程序设计,第二版,清华大学出版社1997

7.   网上下载的全国高自考上机考试题目

8.   陈树振、陈翼男,C++文本文件的一种读写方法,《电脑开发与应用》2008年第10期,中国北方自动控制研究所

9.   陈树振,C和C++的图示教学法,《教学研究》,2005年10月,北京科技职业学院

10.             [美] Peter Van Der Linden, C专家编程,徐波译,人民邮电出版社,2002,12

函数重载与参数缺省值共用可能引起两意性相关推荐

  1. 函数参数缺省值/默认值

    一.基本概念 缺省值又叫默认值,指函数形参有默认值. 有缺省值的情况下,可以不写实参就调用函数. 例: void fun(int a = 12); 二.全部指定与部分指定 全部指定即形参全部都有默认值 ...

  2. python 定义函数时,参数和返回值的数据类型注释

    """ a:int 表示添加a的数据类型注释,但事实上就算传入a的值不是int类型也不会报错,可以正常运行; 但编译器会警告. b:int = 5 表示添加b的数据类型注 ...

  3. 以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值。

    以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值: Sub Example()Dim x As Integer, y As Integerx ...

  4. JavaScript中实现函数重载和参数默认值

    2019独角兽企业重金招聘Python工程师标准>>> 参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高. 举个例 ...

  5. 【TS】函数重载--可选参数--默认参数

    可选参数–默认参数 在ts中定义的数据类型,某些情况下只需要传入定义数据类型的一部分参数,比如:id .name.age.address,此时需要修改用户的名称,那么只需要传入id.name就够了:某 ...

  6. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  7. Python基础之函数2 (参数的返回值)

    https://www.toutiao.com/a6663685808244916739/ 2019-03-02 15:04:15 函数参数的类型 不可变类型参数:整数.字符串.元组. fun(a) ...

  8. C#多线程函数如何传参数和返回值

    提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托就是 具有 同样参数和返回值 的函数的集合. 比如 public delegate void MyDelegate(int a ...

  9. API函数MessageBox的参数与返回值

    Win32汇编函数的参数,参数类型,返回值都是一个dword类型(4字节) 返回值永远放在EAX中,如超过4个字节则返回一个数据的指针(指向返回值存放的缓冲区地址) .data titleS db ' ...

  10. 12_python基础—函数基础(参数、返回值、调用)

    文章目录 目标 一.了解函数 二.函数基本使用 2.1 函数的定义 2.2 函数调用 2.3 第一个函数演练 思考 2.4 PyCharm 的调试工具 2.5 函数的文档注释 三.函数的参数 3.1 ...

最新文章

  1. 直接通过Binder的onTransact完成跨进程通信
  2. 互联网协议 — RIP 路由信息协议
  3. linux命令使用示例:查看某目录属于哪个分区
  4. JS写纸牌发牌和动画(详细解剖)
  5. python 股票数据_从互联网获取股票数据(历史数据,Python + MySQL)
  6. 【ElasticSearch】Es 源码之 NetworkModule 源码解读
  7. 第二周四则运算汇报及总结
  8. 第2次作业 -- 熟悉 JUnit 测试
  9. 智能安防及视频监控系统
  10. 影响因素分析论文用什么模型好?
  11. python往word文档中写入表格、段落、标题、图片...(超级全)
  12. ios 侧滑返回停顿_iOS侧滑卡死解决方法
  13. 铕掺杂的氧化钇纳米片/片状氧化钴二维层状碳化钛复合材料-瑞禧
  14. Linux系统内部流量转发机制,使用TC实现基于Linux系统的流量管理
  15. 关于无刷电机控制芯片UC2625的使用
  16. 算法利用:人机交互面临的道德漏洞
  17. Win10怎么优化网络?网络优化设置
  18. Kong的插件: hmac
  19. XXT-dpkg-脚本
  20. Jenkins mavn多模块单独编译一个模块

热门文章

  1. 中台战略-第五章、中台建设方法论
  2. openwrt 锐捷 单线多拨
  3. windows消息大全
  4. 内存管理基础学习笔记 - 4.2 缺页中断处理 - do_page_fault
  5. 以TFP401A为核心的DVI接口应用系统
  6. (P24)进程间通信介绍二:死锁 ,信号量与PV原语 ,用PV原语解决司机与售票员问题 ,用PV原语解决民航售票问题 ,用PV原语解决汽车租赁问题
  7. Docker部署ElasticSearch
  8. Maven配置文件示例
  9. Linux ssh登陆命令
  10. exynos 4412 电源管理芯片PMIC 的配置及使用方法