虚函数是一个类中希望重载的成员函数,使用基类指针活引用指向一个继承类对象时,调用虚函数实际上是继承类的版本。
虚函数在运行时判断指针指向的对象,从而调动相应的函数,也就是常说的动态绑定,但是缺省参数值却是静态绑定的,在调用一个派生类内的虚函数时,使用的是基类所指定的缺省参数值。
以一下代码为例:
class A
{
public:
virtual void func(int val = 1)
{ std::cout<<"A->"<<val <<std::endl;}
virtual void test()
{ func();}
};
class B : public A
{
public:
void func(int val=0)
{std::cout<<"B->"<<val <<std::endl;}
};
int main(int argc ,char* argv[])
{
B*p = new B;
p->test();
return 0;
}
输出结果为:
B->1
所以“绝不重新定义继承而来的缺省参数值!”