提问者:小点点

使用istream重载覆盖类对象


这里我试图覆盖inventory对象,但是当我运行第二个std::cout它再次打印旧值时,我希望它写入输入值。

#include <iostream>
#include <string>
class inventory
{
private:
    std::string item;
    int onhand;
    double cost;

public:
    inventory(std::string i, int o, double c){
        item = i;
        onhand = o;
        cost = c;
    }
friend std::ostream& operator<<(std::ostream& stream, inventory entity){
    stream << entity.item << "\t" << entity.onhand << "\t" << entity.cost << std::endl;
    return stream;
}
friend std::istream& operator>>(std::istream& stream, inventory entity){
    stream >> entity.item >> entity.onhand >> entity.cost;
    return stream;
}
};

int main()
{
    inventory obj("hammer", 12, 2000);
    std::cout << obj;
    std::cin >> obj;
    std::cout << obj;
    return 0;
}

共2个答案

匿名用户

您面临的问题是,您按值传递Inventory Obj

您需要的是将其作为引用传递,如下所示:

朋友std::istream(&S; 操作员>>(std::iStream&stream,inventory&Entity)

匿名用户

您的运算符>>接受对象的副本并修改该副本。 您需要通过引用传递:

friend std::istream& operator>>(std::istream& stream, inventory entity);