#include <iostream>
/*
virtual函数是动态绑定的,而缺省参数值是静态绑定的,即调用一个定义与
derived class内的virtual函数的同时,却使用的是base class为它所
指定的缺省参数值;
C++编译器以这种方式运作的原因是运行期效率,如果缺省参数值是动态绑定的
编译器就必须有某种办法在运行期间为virtual函数决定适当参数缺省值,这
比目前实行编译期决定的机制更慢和更复杂;
*/
class CShape{
public:
enum shape_color {RED=1, GREEN=2, BLUE=3};
virtual void getColor(shape_color color=RED)
{
std::cout<<color<<std::endl;
}
};
class CCicle:public CShape{
public:
virtual void getColor(shape_color color=GREEN)
{
std::cout<<color<<std::endl;
}
};
class CRectangle:public CShape{
public:
virtual void getColor(shape_color color=BLUE)
{
std::cout<<color<<std::endl;
}
};
int main()
{
//pshape静态类型是CShape*,动态类型是指目前所指对象类型,pshape动态类型是CCicle*
CShape* pshape = new CCicle();
pshape->getColor();
CShape* pshape1 = new CRectangle();
pshape1->getColor();
return 0;
}
C++ 不重新定义继承而来的缺省参数值
最新推荐文章于 2025-08-01 10:01:45 发布
本文探讨了C++中虚拟函数的动态绑定特性与缺省参数值的静态绑定原理。通过实例说明了两者在编译期和运行期效率上的差异,重点在于为何缺省参数值不采用动态绑定。
360

被折叠的 条评论
为什么被折叠?



