gpt4 book ai didi

C++ 虚函数覆盖和重载

转载 作者:行者123 更新时间:2023-11-28 02:02:22 25 4
gpt4 key购买 nike

<分区>

我有以下类结构:

class X
{
// ...
};

class Y : public X
{
// ...
};

class IA
{
public:

virtual void Foo(X* x) = 0;
};

class A : public IA
{
public:

void Foo(Y* y)
{
Foo(static_cast<X*>(y));
}
};

class B : public A
{
public:

virtual void Foo(X* x) override
{
// ...
}
};

但是,这段代码会产生编译错误:

error C2664: 'void A::Foo(Y *)': cannot convert argument 1 from 'X *' to 'Y *'

修复它的方法是将 A::Foo(Y*) 替换为:

void Foo(Y* y)
{
static_cast<IA*>(this)->Foo(static_cast<X*>(y));
}

我无法理解为什么需要此转换,希望能提供一些见解。我也不太确定这是否能保证是一个安全的转换。

根据我的理解,在重载解析期间,编译器应该选择需要最少隐式转换参数的函数。但这里似乎并非如此。

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