c++ - Calling Non Virtual Method from child class -


i know based on polymorphism cannot call non virtual function/method

ex:

class entity { public:      entity() { health = 10; }     void displayhealth() { std::cout << health << std::endl; } protected:      int health; };   class player : public entity {  };  class enemy : public entity {     void sethealth(int n) { health = n; } };  int main() {     entity *instance = new enemy();      instance->sethealth(1); // error     return 0; } 

so have come counteract this:

int main() {     entity *instance = new enemy();      enemy e = *(enemy*)instance;      e.sethealth(1);      instance = &e;  } 

this works fine needs i'm wondering if "correct" way of doing it. there more efficient way call child class method using polymorphism?

entity *instance = new enemy();  enemy e = *(enemy*)instance; 

creates new enemy object , assigns pointed instance it. redundant. , then

instance = &e; 

causes memory leak because lost pointer new enemy() , have not deleted it.


int main() {     entity *instance = new enemy();      enemy *e = static_cast<enemy*>(instance);             ^^      e->sethealth(1);  } 

==================================================================================

==================================================================================

however seeing health member of base class entity, can move sethealth function entity , done it.

class entity { public:      entity() { health = 10; }     void displayhealth() { std::cout << health << std::endl; }     void sethealth(int n) { health = n; } protected:      int health; };  int main() {     entity *instance = new enemy();      instance->sethealth(1); // not error anymore     return 0; } 

Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -