You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现Object类对象添加到House类及输入存储校验问题

需求说明

输入格式:标准输入依次接收 <house_number> <房屋物品数量> …… ,直到EOF结束。
要求使用House类的add方法,将每个房屋对应的n个物品添加到House类的成员vector<Object> valuables中,需要先校验输入是否正确存储到House类,以便后续实现每个房屋内所有物品的总价求和功能。

原有代码问题
  • 核心逻辑错误:读取到当前房屋的物品后,会遍历所有已创建的House实例添加物品,导致所有房屋都被添加了不属于自己的物品,归属关系完全错误
  • 冗余变量:全局声明的vector<Object> obj无实际业务作用,仅用于测试打印,可直接从House实例中读取物品信息完成校验
  • 性能优化点:总价计算函数传值会产生不必要的对象拷贝,改为传常量引用更合理
修复后完整可运行代码
#include <iostream>
#include <utility>
#include <vector>
#include <string>
using namespace std;

class Object {
public:
    string valuable;
    float price;
public:
    Object() : Object("",0) {}
    Object(string v, float p) : valuable(std::move(v)), price(p) {}

    string getValuable() {
        return valuable;
    }
    float getPrice()  {
        return price;
    }
};

class House{
public:
    string street;
    string city;
    uint32_t number;
    vector<Object> valuables;
public:
    House(): House("","",0){}
    House(string s,string c,uint32_t n): street(std::move(s)),city(std::move(c)),number(n){}
    string getStreet() {
        return street;
    }
    string getCity() {
        return city;
    }
    uint32_t getNumber() {
        return number;
    }
    uint32_t getValuablesSize() {
        return valuables.size();
    }
    Object getValuable(uint32_t x){
        return valuables[x];
    }
    void add(Object a){
        valuables.emplace_back(a);
    }

};

float getTotalPrice(const House& a) {
    float sum = 0;
    for (uint32_t i = 0; i < a.getValuablesSize(); i++) {
        sum += a.getValuable(i).getPrice();
    }
    return sum;
}

int main() {
    vector<House> house_list;
    char street[30], city[30], obj_name[30];
    float price;
    uint32_t house_number;
    int obj_count;
    while(cin >> street >> city >> house_number >> obj_count) {
        House cur_house(street, city, house_number);
        for(int i=0; i<obj_count; i++){
            cin >> obj_name >> price;
            cur_house.add(Object(obj_name, price));
        }
        house_list.push_back(cur_house);
    }

    // 校验输入存储结果+打印房屋总价
    for(uint32_t i=0; i<house_list.size(); i++){
        const House& cur = house_list[i];
        cout << "房屋地址:" << cur.getStreet() << " " << cur.getCity() << " " << cur.getNumber() << endl;
        cout << "屋内物品:" << endl;
        for(uint32_t j=0; j<cur.getValuablesSize(); j++) {
            cout << "- " << cur.getValuable(j).getValuable() << " 价格:" << cur.getValuable(j).getPrice() << endl;
        }
        cout << "物品总价:" << getTotalPrice(cur) << endl << "------------------------" << endl;
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者Stefan Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:06:03