首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++虚函数返回类型

C++虚函数返回类型
EN

Stack Overflow用户
提问于 2011-01-12 11:35:54
回答 2查看 54.4K关注 0票数 84

继承的类是否可以实现具有不同返回类型的虚函数(不使用模板作为返回)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-12 11:45:40

在某些情况下,是的,只要返回类型与原始返回类型是协变的,派生类使用不同的返回类型重写虚函数就是合法的。例如,考虑以下内容:

代码语言:javascript
复制
class Base {
public:
    virtual ~Base() {}

    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

在这里,Base定义了一个名为clone的纯虚拟函数,它返回一个Base *。在派生实现中,使用Derived *的返回类型重写此虚函数。尽管返回类型与基中的类型不同,但这是非常安全的,因为在任何时候您都会编写

代码语言:javascript
复制
Base* ptr = /* ... */
Base* clone = ptr->clone();

clone()的调用将始终返回一个指向Base对象的指针,因为即使它返回一个Derived*,该指针也可以隐式转换为Base*,并且操作是定义良好的。

更一般地说,函数的返回类型永远不会被视为其签名的一部分。只要返回类型是协变的,就可以用任何返回类型重写成员函数。

票数 90
EN

Stack Overflow用户

发布于 2011-01-12 11:45:06

虚函数的派生类实现可以具有。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4665117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档