我在玩逻辑转换时注意到了一件奇怪的事情。这是我的代码:
#include <iostream>
using namespace std;
class C
{
public:
virtual int shift(int n = 2) const { return n << 2; }
};
class D
: public C
{
public:
int shift(int n = 1) const { return n << 5; }
};
int main()
{
const D d;
const C *c = &d;
cout << c->shift() << endl;
return 0;
}
程序返回64,所以它取自C类的值n = 2和D类的函数体。
从函数中删除const后它工作正常,但我不明白为什么。有人能帮助我吗?
答案 0 :(得分:6)
默认参数值基于静态类型(编译时已知的类型)。
虚拟功能实现的选择取决于运行时对象的派生类型最多,动态类型。