将对象从一个类添加到另一个类

Posted

技术标签:

【中文标题】将对象从一个类添加到另一个类【英文标题】: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[] 【参考方案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

以上是关于将对象从一个类添加到另一个类的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象添加到另一个类中的 vector<object> ?

Python纸牌游戏 - 尝试将弹出的对象从一个类附加到另一个类

如何将没有类的对象从一个 api 发送到另一个 api?

Flash as3 将一个类中的方法调用到另一个放在舞台上的类。

如何将 React 中的状态从一个类传递到另一个类?

我如何将样式从一个类应用到另一个类,以及其间的所有项目