首页 > 其他 > 详细

虚函数的若干细节

时间:2020-01-04 16:05:47      阅读:91      评论:0      收藏:0      [点我收藏+]
一、在基类的某函数中调用虚函数的情况:
依然是动态绑定的,依然取决于基类指针实际指向的对象类型!
如:
派生类重写了虚函数print();
仅在基类的test()函数调用print()
技术分享图片
技术分享图片
实际输出:Child
说明即使是在基类的某函数中调用虚函数,仍然要看对象的实际类型,是动态绑定的!
 
二、虚函数带默认实参的情况:
当虚函数有默认实参的时候,这个实参的默认值将在编译时确定,当调用虚函数的时候如果此参数没传入,那么默认值将使用“调用该虚函数的对象类型(并不是实际类型)来确定”!即不随动态绑定!与对象实际类型无关!
技术分享图片
比如:
(1)如果基类类指针调用了这个虚函数并不传参,那么参数的默认值是派生类里声明的值,而不管此基类指针实际指向了基类还是派生类!
(2)如果派生类指针调用了这个虚函数并不传参,那么参数默认值是派生类里声明的值。
 
一个程序:
基类的虚函数:print(),默认实参值=0
派生类重写了虚函数print(),默认实参值=100
技术分享图片
 
 
输出为:Child:0 而不是100!
默认实参的默认值是编译时确定的,由于b是Base类型指针,所以这里的i默认值 = Base类中print的i默认值,也就是0
 
所以,尽量让派生类虚函数的默认实参与基类的一致~

虚函数的若干细节

原文:https://www.cnblogs.com/cppdaixiecs/p/12149340.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!