Hallo,
das Design Pattern Singleton (
http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)) dürfte dann hier interessant werden.
Wenn Du wirklich kreuz-und-quer drauf zugreifen möchtest.
Es ist natürlich die Frage, ob man das nicht sauber in den Programmfluss als Argumenten verpacken kann.
Code: Alles auswählen
// untested
// h
class CharactersDB {
public:
static QVector<character*>& getCharacters();
};
// cpp
QVector<character*>& getCharacters() {
static QVector<character*> db;
return db;
}
// Aufrufer:
QVector<character*>& db = CharactersDB::getCharacters();
Meine Antworten/Meinungen zu Deinen Fragen:
a) Wenn er für Dich schnell lesbar und erfassbar ist, dann ja. Sonst nein.
b) Wenn Du es richtig handelst dann nicht. (Deinem Code sieht man es nicht an ...)
c) Das ist eine C++ Grundlagen Fragen, daher mach Dich bitte schlau, welche Arten von Übergaben es existieren.
Lt. Deinem Code Snipe, wird auf dem Speicher vom übergebenen Vector gearbeitet. (Übergabe by ref)
Rückfragen:
Sicher das Deine Klasse schön strukturiert ist, wenn sie 50 Variablen aufzeigt?
Beispiel:
Wenn ich ein detailliertes Auto modellieren möchte, dann mach ich folgendes ja nicht (ist whrsch. eine Geschmacksfrage):
Code: Alles auswählen
class Auto {
public:
// Allg. Eigenschaften
double _maxGeschwindigkeit;
double _gewicht;
// Eigenschaften der Sitze
bool _sitzheizung;
std::string _sitzbezug;
QColor _sitzfarbe;
int _anzhalSitze;
// Eigenschaften der Räder
unsigned char _anzahlReifen;
double _reibungskoeffizent;
// und noch 40 andere Eigenschaften
};
Dann würde ich die Klasse Thematisch gruppieren und die OOP zum tragen kommen lassen:
Code: Alles auswählen
class Fahrzeug {
public:
// Allg. Eigenschaften
double _maxGeschwindigkeit;
double _gewicht;
};
class Sitz {
public:
// Eigenschaften der Sitze
bool _sitzheizung;
std::string _sitzbezug;
QColor _sitzfarbe;
}
class Rad {
// Eigenschaften der Räder
double _reibungskoeffizent;
};
class Auto : public Fahrzeug {
public:
std::vector< Sitz > _sitze; // anzahl steckt implizit im vector
std::vector< Rad > _raeder; // anzahl steckt implizit im vector
}
Viele Grüße