我知道如果指针指向派生类对象,虚函数会被更改,但只是函数体改变了吗?我有以下代码:
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
吗?是因为它首先调用虚拟函数然后转到派生类?