Attualmente sto facendo un programma di console sull'acquisto di una proprietà in una città. Le proprietà possono essere acquistate dalla città da qualcuno, trasferite a un'altra persona o restituite alla città se la persona che ha la proprietà muore.
Ho creato 3 classi: Persona, Città e Proprietà. Le mie classi Person e City hanno entrambi i vettori di unique_ptrs of Property. My main.cpp ha una città unique_ptr e un vettore di Person unique_ptrs e fa l'inizializzazione di base.
class Person {
string name;
vector<unique_ptr<Property>> ownedProperties;
public:
string getName();
vector<unique_ptr<Property>> const& getOwnedProperties();
};
class City {
string name;
vector<unique_ptr<Property>> ownedProperties;
public:
string getName();
vector<unique_ptr<Property>> const& getOwnedProperties();
};
class Property {
string name;
int id;
public:
int getID();
string getName();
}
int main() {
int numProperties;
vector<unique_ptr<Person>> people;
unique_ptr<City> city;
// initializing everything
printAllProperties();
}
Ho deciso di utilizzare unique_ptr perché sto pensando di creare sottoclassi di proprietà in un secondo momento e perché voglio assicurarmi che una proprietà abbia un solo proprietario. Sto usando move () per trasferire la proprietà tra i vettori di proprietà di Città e Persona. Sto anche stampando informazioni come questa:
City: San Johncisco
ID | Property Name | Owner
0 | A | John
1 | B | San Johncisco
2 | C | Johnny
3 | D | Johnathan
4 | E | San Johncisco
5 | F | Johnalina
6 | G | Johnatha
Il problema è che poiché voglio stampare le proprietà in ordine, finisco per avere qualcosa del genere:
for (int currentID = 0; currentID < numProperties; currentID++) {
for (auto property: city->getOwnedProperties()) {
if (property->getID() == currentID) {
// print info
}
}
for (auto person: people) {
for (auto property: person->getOwnedProperties()) {
if (property->getID() == currentID) {
// print info
}
}
}
}
Questo sembra davvero brutto e mi sento come se avessi potuto progettare meglio il programma / metodo. Qualche consiglio?