只是虚拟功能的主体改变了?

时间:2014-01-23 13:15:13

标签: c++

我知道如果指针指向派生类对象,虚函数会被更改,但只是函数体改变了吗?我有以下代码:

class B
{
public:
    virtual int shift(int n = 2) const { return n << 2; }
};

class D
    : public B
{
public:
    int shift(int n = 3) const { return n << 3; }
};

int main()
{
    const D d;
    const B *b = &d;

    std::cout << b->shift() << std::endl;

    return 0;
}

我预计会打印3 << 3 = 24,但会打印2 << 3 = 16。你可以告诉我为什么选择n = 2吗?是因为它首先调用虚拟函数然后转到派生类?

0 个答案:

没有答案