gpt4 book ai didi

c++ - 为什么选择的是重载基类值的默认参数值,而不是执行的派生方法中指定的默认值

转载 作者:太空狗 更新时间:2023-10-29 20:24:10 25 4
gpt4 key购买 nike

我在玩逻辑移位时注意到一件奇怪的事情。这是我的代码:

#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 后它工作正常,但我不明白为什么。有人可以帮助我吗?

最佳答案

默认参数值基于静态类型(编译时已知的类型)。

虚函数实现的选择由对象在运行时派生程度最高的类型控制,即动态类型

关于c++ - 为什么选择的是重载基类值的默认参数值,而不是执行的派生方法中指定的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29448457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com