Why doesn't polymorphism work without pointers/references?

前端 未结 6 1341
萌比男神i
萌比男神i 2020-11-22 03:09

I did find some questions already on SO with similar title- but when I read the answers they were focussing on different parts of the question which were really specific (e.

6条回答
  •  死守一世寂寞
    2020-11-22 03:52

    "Surely so long as you allocate memory on the heap" - where the memory is allocated has nothing to do with it. It's all about the semantics. Take, for instance:

    Derived d;
    Base* b = &d;
    

    d is on the stack (automatic memory), but polymorphism will still work on b.

    If you don't have a base class pointer or reference to a derived class, polymorphism doesn't work because you no longer have a derived class. Take

    Base c = Derived();
    

    The c object isn't a Derived, but a Base, because of slicing. So, technically, polymorphism still works, it's just that you no longer have a Derived object to talk about.

    Now take

    Base* c = new Derived();
    

    c just points to some place in memory, and you don't really care whether that's actually a Base or a Derived, but the call to a virtual method will be resolved dynamically.

提交回复
热议问题