函数有默认值,同样虚函数也有默认值。默认值都是在程序编译期间进行处理的,而静态绑定也是在程序编译时确定函数名和函数体的关系,所以虚函数中使用默认参数会得到意想不到的结果。
其规则是如果虚函数中带有默认值,派生类的指针或对象引用调用该函数时,函数参数总是选择基类的函数的参数默认值,该函数的派生类的同名函数的默认值将不会起任何作用。
简单地说就是虚函数中含有默认值,派生类的虚函数的参数值是没有任何作用的。但这只在基类指针对象或者引用调用函数的情况下成立,如果是派生类对象直接调用虚函数,不是会使用派生类中的默认参数值。
pt->transport是动态绑定(对象指针访问)
c.transport是静态绑定(对象直接访问)