Differing return type for virtual functions

前端 未结 4 532
余生分开走
余生分开走 2020-12-19 01:20

A virtual function\'s return type should be the same type that is in base class, or covariant. But why do we have this restriction?

4条回答
  •  孤城傲影
    2020-12-19 01:53

    Because of the nonsense that would ensue:

    struct foo
    {
        virtual int get() const { return 0; }
    };
    
    struct bar : foo
    {
        std::string get() const { return "this certainly isn't an int"; }
    };
    
    int main()
    {
        bar b;
        foo* f = &b;
    
        int result = f->get(); // int, right? ...right?
    }
    

    It isn't sensible to have a derived class return something completely unrelated.

提交回复
热议问题