将对象从一个类添加到另一个类
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;
这就是我的想法:
-当我阅读 vector<Object>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纸牌游戏 - 尝试将弹出的对象从一个类附加到另一个类