- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C缺省函数参数.
缺省参数同函数重载一样,给程序员提供了很多方便,它们都使我们可以在不同的场合使用同一名字。不同之处是,当我们不想亲手提供这些值时,由编译器提供一个缺省参数。有时可用缺省参数代替函数重载。用函数重载我们得把一个几乎同样含义、同样操作的函数写两遍甚至更多。当然,如果函数之间的行为差异较大,用缺省参数就不合适了。 在使用缺省参数时需注意以下几点。只有参数列表的后部参数才可是缺省的,也就是说,我们不可以在一个缺省参数后面又跟一个非缺省的参数。一旦我们开始使用缺省参数,那么这个参数后面的所有参数都必须是缺省的。(从左至右,第一个为缺省,则所有均为缺省参数。)缺省参数只能放在函数声明中,通常在一个头文件中。编译器必须在使用该函数之前知道缺省值。小小补充:函数定义与原型(声明)中的参数名称可以不同,编译器只检查参数类型是否相同;相同,编译通过;反之,不通过; 要说明的是,上述3是很多课本和视频教程里谈到的,关于这个说法应该怎样去理解呢???? 我想可以这样理解:函数的实现(定义)本来就与参数是否有缺省值无关,所以没有必要让缺省值出现在函数的定义体中。其次参数的缺省值可能会改动,显然修改函数的声明比修改函数的定义要方便。但是如果我们不遵循这样的一个规则,编译器仍然是能通过的。例如:上面如果把实现文件的函数加上缺省参数值,无论是否int y=0还是其他值都会发生编译错误:error C2572: “father::print”: 重定义默认参数: 参数C++中 虚函数中的默认参数问题当通过指针调用一个对象的方法时,如果该方法是虚函数,则实际调用的是该实例的方法。?当缺省参数和虚函数一起出现的时候到底用哪个默认值呢?虚函数是动态绑定的,但是为了执行效率,缺省参数是静态绑定的。也就是指针是哪种类型,就调用该类型对应的类中,该函数定义时的缺省值。由上可知pa-out()和pa-out(3)调用都是函数A::out(int i),由上可知pb-out()和pb-out(4)调用都是函数B::out(int i),缺省参数是静态绑定的,pb-out()时,pb的静态类型是A*,它的缺省参数是1;但是调用的是B::out(int i)编写代码验证了一下,正确。对于这个特性,估计没有人会喜欢。所以,永远记住:“绝不重新定义继承而来的缺省参数(Never redefine function’s inherited default parameters value.)”上面得输出如下?关于C++虚函数默认参数的问题。Effective C++ 条款38: 决不要重新定义继承而来的缺省参数值分类:?C/C++2011-05-23 10:49?1511人阅读?评论(8)?收藏?举报c++编译器class图形c目录(?)[+]昨晚在chgaowei的博客上关于讨论C++虚函数的默认参数问题,刚翻书找了一下,在Effective C++ 中的38条有说明。直接上原文吧,最后加几句细点的理解条款38:?决不要重新定义继承而来的缺省参数值让我们从一开始就把问题简化。缺省参数只能作为函数的一部分而存在;另外,只有两种函数可以继承:虚函数和非虚函数。因此,重定义缺省参数值的唯一方法是重定义一个继承而来的函数。然而,重定义继承而来的非虚函数是一种错误(参见条款37),所以,我们完全可以把讨论的范围缩小为?继承一个有缺省参数值的虚函数?的情况。既然如此,本条款的理由就变得非常明显:虚函数是动态绑定而缺省参数值是静态绑定的。什么意思?你可能会说你不懂这些必威体育精装版的面向对象术语;或者,过度劳累的你一时想不起静态和动态绑定的区别。那么,让我们来复习一下。对象的静态类型是指你声明的存在于程序代码文本中的类型。看下面这个类层次结构:[cpp]?view plaincopyprint?enum?ShapeColor?{?RED,?GREEN,?BLUE?};????//?一个表示几何形状的类????class?Shape?{????public:??????//?所有的形状都要提供一个函数绘制它们本身??????virtual?void?draw(ShapeColor?color?=?RED)?const?=?0;??????...????};????class?Rectangle:?public?Shape?{????public:??????//?注意:定义了不同的缺省参数值?----?不好!??????virtual?void?draw(ShapeColor?color?=?GREEN)?const;??????...????};????class?Circle:?public?Shape?{????public:??????virtual?void?draw(ShapeColor?col
文档评论(0)