gpt4 book ai didi

c++ - 覆盖具有不同返回类型的虚函数

转载 作者:行者123 更新时间:2023-11-30 00:44:02 24 4
gpt4 key购买 nike

我知道如果返回类型是协变的,可以使用返回类型覆盖虚函数。

但是我们可以使用改变后的返回类型吗?或者返回类型将隐式转换为基类函数的返回类型,如 B*A*

class A
{
public:
virtual A *func()
{
A *obj=0;
return obj;
}
};

class B:public A
{
public:
virtual B *func()
{
B *obj =0;
return obj;
}
};

int main()
{
A *obj = new B();
obj->func(); // does in fact call B::func()
B *obj2 = obj->func(); // throws error: invalid conversion from 'A*' to 'B*'

return 0;
}

似乎 obj->func() 正在返回 A* 而不是 B* 因此我得到了这个转换错误。

最佳答案

静态类型检查必须仍然有效,即使动态类型在实现中做了一些稍微不同的事情。所以它真的取决于所指向对象的静态类型。当您在 A* 上调用虚拟成员时,返回类型指定为 A*

如果您要在 B* 上调用它,函数的返回类型将(静态)为 B*

B *obj = new B();
obj->func();
B *obj2 = obj->func(); // Okay now

无论何时处理 C++ 中的运行时多态性,都是对象的静态类型决定了接口(interface)。

关于c++ - 覆盖具有不同返回类型的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301734/

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