函数参数按引用传递和按值传递对动态联编的影响

    xiaoxiao2021-03-25  157

    不适当的代码将阻止动态联编.例如,下面两个函数:

    基类: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

    最新回复(0)