polymorphism - C++ Calling a child class function from a base class when I don't know the childs' type -
polymorphism - C++ Calling a child class function from a base class when I don't know the childs' type -
i have inventory stores 'inventoryitem's.
struct inventoryitem{ item* item; unsigned int quantity;}; std::vector<inventoryitem> m_items; i add together items following, m_inventory.additem(bandage);
but when seek phone call bandages's use() function has been derived item base of operations class, calls item class use() funtion instead.
it has been declared in item class so,
// .... public: // .... virtual void use(player&){} // .... it has been declared in bandage class so,
// .... class bandage : public item{ public: // .... virtual void use(player&); // .... it has been defined in bandage class so,
void bandage::use(player& player) { player.heal(35); } when effort phone call use() function of item, instance, m_items.at(i).item->use(*m_player);
it calls base of operations class 'item' use() function, rather 'bandage' use() function.
edit: here additem function,
void inventory::additem(const item& item) { if ((m_items.size() < m_capacity)) { bool founditem(false); (auto invitem : m_items) { // if item exists, lets increment quantity if (invitem.item->getid() == item.getid()) { founditem = true; if (invitem.quantity < invitem.item->getinventoryquantitylimit()) { ++invitem.quantity; } } } if (!founditem){ m_items.push_back(inventoryitem{ new item(item), 1 }); } } }
the problem in additem() function, more exactly here:
m_items.push_back(inventoryitem{ new item(item), 1 }); the pointer item* in inventoryitem ends pointing item, , not objects derived item, when item is derived object. look new item(item) doesn't create derived object, invokes (default if haven't written it) re-create constructor of item derived object item parameter. creates item object on heap, returning pointer it.
you improve off mill method creates required items, , rid of raw pointers in favor of std::shared_ptr (or std::unique_ptr, although here std::shared_ptr better).
c++ polymorphism base-class
Comments
Post a Comment