Yak*_*kov 5 c++ overriding return-type
返回类型是否会影响函数覆盖?(据我所知,返回typde不是函数/方法签名的一部分)在基类中,我有一个函数,它不获取参数,返回int并且是纯虚拟的.在每一个派生类中,我定义为返回type.The功能在派生类中重写一个枚举,即它具有相同签名但不同的行为.问题是:覆盖和返回类型的合法性是不是函数覆盖的一部分吗?
代码示例:
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;}
};
Run Code Online (Sandbox Code Playgroud)
您可以覆盖具有不同返回类型的函数,但只允许协变返回类型。
函数重写意味着将在运行时调用基类方法或派生类方法,具体取决于指针指向的实际对象。
这意味着:
即:每个可以调用基类方法的地方都可以通过调用派生类方法来替换,而无需对调用代码进行任何更改。
为了实现这一点,唯一可能的方法是限制重写虚拟方法的返回类型以返回与基类相同的类型或从该基类派生的类型(协变返回类型),因此标准强制执行此条件。
如果没有这个条件,现有代码将因添加新功能(新的覆盖函数)而中断。
| 归档时间: |
|
| 查看次数: |
4655 次 |
| 最近记录: |