Problem overridding virtual function

后端 未结 3 1829
灰色年华
灰色年华 2020-12-21 10:41

Okay, I\'m writing a game that has a vector of a pairent class (enemy) that s going to be filled with children classes (goomba, koopa, boss1) and I need to make it so when I

3条回答
  •  别那么骄傲
    2020-12-21 11:14

    Polymorphism only works on pointers and references. If you assign a B to an A, it becomes an A and you lose all B-specific information, including method overrides. This is called "slicing"; the B parts are "sliced" off the object when it is assigned to an object of a parent class.

    On the other hand, if you assign a B* to an A*, it looks like an A*, but is still really pointing to a B, and so the B-specific information remains, and B's virtual overrides will be used.

    Try:

    int main(){
        A* ab = new B();
        ab->print();
        delete ab;
        while(true){}
    }
    

    The same also applies to assigning a B to an A& (reference-to-A), e.g.

    int main(){
        B b;
        A& ab = b;
        ab.print();
        while(true){}
    }
    

提交回复
热议问题