gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:57 25 4
gpt4 key购买 nike

返回类型是否影响函数覆盖? (据我所知,返回类型不是函数/方法签名的一部分)在基类中,我有一个函数,它不获取参数,返回 int 并且是纯虚拟的。在每个派生类中,我为返回类型定义一个枚举。该函数在派生类中被覆盖,即它具有相同的签名但行为不同。问题是:覆盖和返回类型不是函数覆盖的一部分是否合法?

代码示例:

class Base
{
public:
typedef int ret;
virtual ret method() = 0;
};

class Der1
{
public:
enum ret1{
ret1_0,
ret1_1
};
ret1 method() { return ret1_1;}
};

class Der1
{
public:
enum ret2{
ret2_0,
ret2_1
};
ret1 method() { return ret2_0;}
};

最佳答案

您可以覆盖具有不同返回类型的函数,但只允许协变返回类型

Function Overriding 是指根据指针指向的实际对象,在运行时调用 Base 类方法或 Derived 类方法。
这意味着:
即:可以调用 Base 类方法的每个地方都可以调用 Derived 类方法来替换,而不需要对调用代码进行任何更改。

为了实现这一点,唯一可能的方法是限制重写虚方法的返回类型以返回与基类相同的类型或从基类派生的类型(共变返回类型),因此标准强制执行这种情况。

如果没有这个条件,现有代码将因添加新功能(新的覆盖函数)而中断。

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

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