<分区>
我有一个基类 Item 和派生类 Weapon & Shield。两者都重载<<。
// item(base) operator overload
ostream& operator<<(ostream& os, const Item& a_item)
{
os << " Item Object - " << endl;
os << " Name: " << a_item.m_name << endl;
os << " Cost: " << a_item.m_cost << endl;
os << " Purpose: " << a_item.m_purpose << endl;
return os;
}
和:
// weapon(derived) operator overload
ostream & operator<<(ostream & os, const Weapon & a_weapon)
{
os << "Weapon - " << endl;
os << " Name: " << a_weapon.m_name << endl;
os << " Cost: " << a_weapon.m_cost << endl;
os << " Purpose: " << a_weapon.m_purpose << endl;
return os;
}
// shield(derived) operator overload
ostream & operator<<(ostream & os, const Shield & a_shield)
{
os << "Shield - " << endl;
os << " Name: " << a_shield.m_name << endl;
os << " Cost: " << a_shield.m_cost << endl;
os << " Purpose: " << a_shield.m_purpose << endl;
return os;
}
现在,我有一个 vector<Item> inventory
,我正在向其中添加武器和盾牌。当我遍历库存并计算项目时,我得到了 Item 运算符而不是该特定项目的运算符。这是我调用 cout 的方式:
// person(derived) operator overload
ostream& operator<<(ostream& os, const Person& a_person)
{
os << "Person Object - " << endl;
os << " Name: " << a_person.m_name << endl;
os << " Level: " << a_person.m_level << endl;
os << " Hit Points: " << a_person.m_hit_points << endl;
os << " Inventory: " << endl;
for (auto i = 0; i < a_person.m_inventory.size(); i++)
{
os << " " << a_person.m_inventory[i] << endl;
}
return os;
}
我的问题是为什么它调用基类的运算符重载,而不是派生类?是否可以告诉它调用派生类中的那个?