C++11-LIKE
Cadet 1st Year
- Registriert
- Juli 2016
- Beiträge
- 10
Hallo,
ich habe eine Klasse erstellt, welche unter anderem als Eigenschaft einen vector mit dem Typ <Object> enthält.
Nun möchte ich, wenn ich einen Raum/Room und ein paar Objekte/Objects erstellt habe, ausgewählte Objekte mit der Methode addObjects() diesem Vektor der Klasse übergeben. Wird jetzt ein Object an den Eigenschaften geändert, ändern sich natürlich nicht die Eigenschaften der gespeicherten Objekte im Vektor objects der Klasse Room. Gern hätte ich das aber so.
Ich hatte darüber nachgedacht im Vektor Objekt-Referenzen zu speichern, aber das habe ich nicht hinbekommen. Dann dachte ich mir, dass die Methode set_name() gleichzeitig auch den Namen/name des entsprechenden Objektes im Vektor ändern soll, aber das ist doch keine "schöne" Lösung des Problems – vor allem deshalb nicht, weil ich später noch weitere Abfragen(z.B. ist der Objektname bereits in Verwendung?, …) und Funktionen(Objekt löschen, ...) hinzufügen möchte u.s.w. Der Code weiter unten ist ein Testprogramm für das "richtige" Projekt, wo die Klassen bereits voll(oder besser: fast eben) implementiert sind. Vielleicht kann mir jemand hier helfen das Problem auf eine "gute Art und Weise" zu lösen.
Vielen Dank im Voraus!
PS: Sorry, aber beim Titel hatte ich wirklich keine bessere Idee ...

PPS: Der Code oben geht ohne Probleme zu kompilieren.
ich habe eine Klasse erstellt, welche unter anderem als Eigenschaft einen vector mit dem Typ <Object> enthält.
Nun möchte ich, wenn ich einen Raum/Room und ein paar Objekte/Objects erstellt habe, ausgewählte Objekte mit der Methode addObjects() diesem Vektor der Klasse übergeben. Wird jetzt ein Object an den Eigenschaften geändert, ändern sich natürlich nicht die Eigenschaften der gespeicherten Objekte im Vektor objects der Klasse Room. Gern hätte ich das aber so.

Code:
#include <iostream>
#include <vector>
#include <string>
class Room {
class Object;
std::vector<Object> objects;
int nr;
public:
class Object {
std::string name;
public:
Object(std::string name) : name(name) {}
~Object() {}
std::string get_name() const { return name; }
void set_name(const std::string& new_name) {
name = new_name;
}
};
Room(int nr) : nr(nr) {}
~Room() {}
int get_nr() const { return nr; }
void set_nr(int new_nr) { nr = new_nr; }
void addObjects(std::vector<Object> objects) {
for (auto object : objects) {
this->objects.push_back(object);
}
}
void showAllObjectValues() {
for (auto object : objects) {
std::cout << object.get_name() << std::endl;
}
system("PAUSE");
std::cout << "\n\n";
}
};
int main() {
Room r1(1);
Room::Object obj1("box");
Room::Object obj2("harpsichord");
Room::Object obj3("sheet");
r1.addObjects({ obj1, obj2, obj3 });
r1.showAllObjectValues(); // box - harpsichord - sheet
obj3.set_name("paper");
r1.showAllObjectValues(); // natürlich immernoch: box - harpsichord - sheet
return 0;
}
Vielen Dank im Voraus!
PS: Sorry, aber beim Titel hatte ich wirklich keine bessere Idee ...


PPS: Der Code oben geht ohne Probleme zu kompilieren.