当前位置:首页 > 天道酬勤 > 正文内容

什么时候虚函数(虚函数的特点)

张世龙2021年12月21日 09:40天道酬勤380

c.128:虚拟函数sshouldspecifyexactlyoneofvirtual,总体,或最终

C.128:虚函数应该明确定义为虚拟、复盖或最终

Reason (原因)

readability.detectionofmistakes.writingexplicitvirtual,复盖, orfinalisself -文档保护和可扩展辅助机械数据传输/Ornamesbetweenbaseandderivedclasser.However,wrowever

易读性。 检测错误。 明确virtual、overide或final本身就是说明,它允许编译器捕捉派生类与基类之间的类型或名称不匹配。 但是,使用这三个中的两个或三个是很容易引起多余和潜在的错误的。

It's simple and clear (下一个规则简单明快) :

virtualmeansexactlyandonly ' thisisanewvirtualfunction.' virual已明确表示,“这是一个新的虚函数”overridemeansexactlyandonly ' this is 明确表示“这不是最终的掩饰者”,明确表示“这不是最终的掩饰者”,明确表示“这是最终的掩饰者”,“Example,bad”(

结构b

音频f1(音频);

虚拟音频2 (整数)常数;

虚拟音频3 (英寸;

//.

(;

结构: b

音频f1(音频); //bad(hopeforawarning ) :D:f1) hidesB:f1) )。

void F2 (整数)常数; //bad(butconventionalandvalid ) :noexplicitoverride

音频f3(双精度); //bad(hopeforawarning ) :D:f3) hidesB:f3) )。

//.

(; 样本) ) ) ) ) ) ) )。

结构下注器: b

void f1 (整数)复盖;//错误(二氧化碳) :比特33603360 f1(硬盘33603360 f1 ) ) )。

void F2 (整数)一致性复盖;

音频f3(双倍)复盖;//错误(caught ) :比特: f3)硬盘: f3) )。

//.

(; 讨论,讨论

wanttoeliminatetwoparticularclassesoferrors :

我们想排除两种特殊的错误:

IMPLICIT Virtual 3360 TheprogrammerintendedthefunctiontobeimplicitlyVirtualanditis (Butreadersofthecodecan ' Tell ); ortheprogrammerintendedthefunctiontobeimplicitlyvirtualbutitisn ' t (e.g .Becauseofasubtleparameterlistmismatch ); ortheprogrammerdidnotintendthefunctiontobevirtualbutitis (becauseithappenstohavethesamesignatureasavirtualinthebaseclass )隐式或者,虽然程序员不期待函数变成虚函数, 它由implicit override 3360 theprogrammerintedthefunctiontobeimplicitlyanoverrideranditis (orthhhanditis ontobeimplicitlyanoverriderbutitisn ' t (e.g .Becauseofasubtleparameterlistmismatch ); ortheprogrammerdidnotintendthefunctiontobeanoverriderbutitis (becauseithappenstohavethesamesignatureasavirtualinthebasecla ss ) therornotthefunctionisexplicitlydeclaredvirtual,becausetheprogrammermayhaveintendedtocreateeitheranewvirtualfunctionoranewnonono 程序员期望函数隐式地成为复盖函数。 而且那是真的。 (但代码读者不知道)。 或者,程序员期待函数隐式地成为复盖函数,但那不是。 例如,因为参数列表的微小差异。 或者,程序员不期望函数成为复盖函数,但那是“因为与基类的某个虚函数有相同的签名”。 无论函数是否被明确声明为虚函数,都会出现这些问题。 程序员本来想生成的可能是虚函数,也可能不是。 建议实施功能

比较comparevirtualfunctionnamesinbaseandderivedclassesandflagusesofthesamenamethatdoesnotoverride .基类和派生类的虚函数名,但使用相同的名称flagoverrideswithneitheroverridenorfinal .表示未声明为override或finald的复盖函数。 flagfunctiondeclarationsthatusemorethanoneofvirtual,override,and final .是virtual,override,final三个关键字的两个或三个函数原文链接:

359 Github.com/ISO CPP/CPPCoreguidelines/Blob /主机/CPPCoreguidelines.MD # C128 -虚拟功能- Should

你觉得正文有用吗? 请分享给更多的人。

更多精彩文章请关注Wechat公众号【面向对象的思考】!

面向对象开发,面向对象思维!

扫描二维码推送至手机访问。

版权声明:本文由花开半夏のブログ发布,如需转载请注明出处。

本文链接:https://www.zhangshilong.cn/work/26231.html

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。