【问题标题】:Adding Objects from a Class to another Class将对象从一个类添加到另一个类
【发布时间】:2021-12-10 21:57:49
【问题描述】:
 INPUT STDIN -> <street> <city> <house_number> <number of objects of house> <object1> <price1> .......<object-n> <price-n> (until EOF)

我需要在“House”类中使用“add”方法。
目标:将每个House的具体n个对象添加到“房子”类

这就是我从现在开始所做的:

#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(House a) {
    float sum = 0;
    for (int i = 0; i < a.getValuablesSize(); i++) {
        sum +=a.valuables[i].getPrice();
    }
    return sum;
}

int main() {

    vector<Object>obj;
    vector<House>house;
    char object[30],street[30],city[30];
    float price;
    uint32_t house_number;
    int n;
    while(cin>>street>>city>>house_number>>n) {
        house.emplace_back(string(street),string(city),house_number);
        Object a;
        for(int i=0;i<n;i++){
            cin>>object>>price;  
            obj.emplace_back(object,price);
            a.valuable=object;
            a.price=price;
            for(int k=0;k<house.size();k++)
            house[k].add(a);          
        }      
    }
    for(int i=0;i<obj.size();i++){
        cout<<obj[i].getValuable()<<" "<<obj[i].getPrice()<<endl;
   } // trying to print the object vector
    for(int i=0;i<house.size();i++){ //trying to verify if i have the correct input
        cout<<house[i].getStreet()<<" "<<house[i].getCity()<<" "<<house[i].getNumber()<<" ";
        for(int j=0;j<house[i].getValuablesSize();j++) {
            cout << house[i].valuables[j].valuable<< " "<<house[i].valuables[j].price<<" ";
        } 
        cout<<endl;
    }

    return 0;
}

这就是我的想法: -当我阅读 时,请阅读对象和价格,然后应使用 add 方法以使 vector&lt;Object&gt;valuables 可用。
必须检查输入是否正确存储在“房屋”类中,为了继续对每个房屋中的对象求和

【问题讨论】:

  • 旁注,在大多数情况下,您应该更喜欢std::string 而不是char[]

标签: c++ class struct


【解决方案1】:

用语句

for(int k=0;k<house.size();k++)
    house[k].add(a);

您将当前的“有价值”对象添加到迄今为止已创建的每个房屋中。

我建议您改为单独创建房屋对象,然后将有价值的对象添加到当前房屋中,然后将房屋添加到您的房屋集合中。

可能是这样的:

std::string street;
std::string city;
unsigned house_number;
unsigned n;

while(std::cin >> street >> city >> house_number >> n) {
    House current_house(street, city, house_number);

    std::string object;
    float price;

    for(int i = 0; i < n && std::cin >> object >> price; ++i) {
        Object a(object, price)
        current_house.add(a);
    }

    house.push_back(current_house);
}

【讨论】:

  • 非常感谢,它成功了!我不这么认为,但从现在开始很高兴知道,因为 1 周前我刚刚开始学习 OOP
猜你喜欢
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2017-12-20
  • 2016-09-06
  • 2017-05-27
相关资源
最近更新 更多