C++ overridden function not called

后端 未结 3 484
攒了一身酷
攒了一身酷 2021-01-28 12:01

I am running into an issue where an overloaded function is not called, and the base function is called instead. I suspect this is related to how things are split between the pr

相关标签:
3条回答
  • 2021-01-28 12:19

    print is not a virtual function, so you are just relying on static dispatch. This will select the function to call based on the static type of the object, which is obj1in this case.

    You should make print virtual:

    class obj1{
    public:
        virtual void print();
    };
    

    Then if you use C++11 you can mark obj2::print as override for safety's sake:

    class obj2 : public obj1{
    public:
        void print() override;
    };
    

    Also note that you never allocate any memory for newobj2.

    0 讨论(0)
  • 2021-01-28 12:24

    I am not entirely sure, it is log time since i did c++, but as I remember You should have the vectors contents be classes with pure virtual functions.

    That should force it to look up the right method.

    There is a stack overflow answer here, which is slightly related:

    Pure Virtual Class and Collections (vector?)

    0 讨论(0)
  • 2021-01-28 12:29

    You should declare print() as virtual to calling obj2::print() for obj2 objects.

    virtual void print();
    
    0 讨论(0)
提交回复
热议问题