不适当的代码将阻止动态联编.例如,下面两个函数:
基类:Brass,派生类:BrassPlus
ViewAcct()为基类和派生类的虚函数
void show(const Brass & rba)
{
rba.ViewAcct();
}
void inadequate(Brass ba)
{
ba.ViewAcct(); }
第一个函数按引用传递对象,第二个按值传递对象。
现在,假设将派生类参数传递给上述两个函数:
BrassPlus buzz();
show(buzz;
inadequate(buzz);
show()函数调用使rba参数成为BrassPlus对象buzz的引用,因此,rba.ViewAcct()被解释为BrassPlus版本。但在inadequate()函数中它是按值传递对象的,ba是Brass(const Brass &)构造函数创建的一个Brass对象(自动向上强制转换使得构造函数参数可以引用一个BrassPlus对象)。因此,在nadequate()中,ba.ViewAcct()是Brass版本,所以只有buzz的Brass部分被显示。
转载请注明原文地址: https://ju.6miu.com/read-6080.html