我确信在StackOverflow上已经有了这个问题的正确答案,但我找不到它。
我在一些c ++测试中遇到了这个例子,对我来说这是一个意想不到的行为。
class A {
public:
virtual int foo(int n = 3) {
return n << 2;
}
};
class B : public A {
public:
int foo(int n = 4) {
return n << 3;
}
};
void main() {
B b;
A *a = &b;
std::cout << a->foo() << std::endl;
}
我一直都知道在 B 类中会覆盖 f ,但 的默认值来自基础类 foo 确实出乎意料。
我们将通过将指针替换为B并使用引用替换为B来获得相同的输出(24)。
我的问题是: