gpt4 book ai didi

c++ - 带有默认参数的虚函数,奇怪的输出

转载 作者:太空狗 更新时间:2023-10-29 19:57:14 33 4
gpt4 key购买 nike

这段代码的输出是15,我真的不知道为什么。我认为它在 foo 函数中使用了 x=5 但我不知道为什么。谁能帮帮我?

#include <iostream>
#include <string>

using namespace std;


struct A
{
virtual int foo(int x = 5)
{
return x*2;
}
};

struct B : public A
{
int foo(int x = 10)
{
return x*3;
}
};



int main(int argc, char** argv)
{
A* a = new B;
cout << a->foo();
return 0;
}

最佳答案

I think that it uses x=5 in the foo function but I don't know why.

是的,这里使用了基类 A 声明的默认参数(即 5),因为您正在调用 foo() 在具有静态类型 A* 的对象上。 default arguments是根据静态类型决定的,而不是动态类型。

标准对此有明确的解释,$8.3.6/10 Default arguments[dcl.fct.default] :

(强调我的)

A virtual function call ([class.virtual]) uses the default arguments in the declaration of the virtual function determined by the static type of the pointer or reference denoting the object. An overriding function in a derived class does not acquire default arguments from the function it overrides. [ Example:

struct A {
virtual void f(int a = 7);
};
struct B : public A {
void f(int a);
};
void m() {
B* pb = new B;
A* pa = pb;
pa->f(); // OK, calls pa->B::f(7)
pb->f(); // error: wrong number of arguments for B::f()
}

— end example ]

关于c++ - 带有默认参数的虚函数,奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39283164/

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