通常情况下,如果我们不适用某个函数,则无需为该函数提供定义。但我们必须为每个虚函数都提供定义而不管它是否被用到了,这因为连编译器也无法确定到底会适用哪个虚函数
对虚函数的调用可能在运行时才被解析:
当某个虚函数通过指针或引用调用时,编译器产生的代码直到运行时才能确定应该调用哪个版本的函数。被调用的函数是与之绑定到指针或引用上的对象的动态类型相匹配的那一个
注意:动态绑定只有当我们通过指针或引用调用虚函数时才会发生。当我们通过一个具有普通类型(非引用非指针)的表达式调用虚函数时,在编译时就会将调用的版本确定下来:
1 Quote base; 2 Bulk_quote derived; 3 base = derived;//将derived的Quote部分拷贝给base 4 base.net_price(20);//调用Quote::net_prive