PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Gemeinsame Variable für mehrere Klassen


Gast
2012-02-01, 11:40:11
Hallo!

Ich schreibe ein kleines GUI-Programm mit dem C++ Builder, das aus 3 Forms/Klassen besteht. Ich hätte gerne eine gemeinsame (Zeiger)Variable, die ich in einer Klasse zuweise aber nach der Zuweisung auch in den beiden anderen Klassen nutzen kann.

Also etwa so:

Klasse1:
char *bla;
bla = "hallo";

Wenn ich nun in Klasse 2 und 3 den Zeiger "bla" verwende, so soll sich dahinter auch "hallo" befinden.
Wie muss ich bla in Klasse1 deklarieren?

Gast
2012-02-01, 11:41:08
Und natürlich auch in Klasse2 und 3...

Baalzamon
2012-02-01, 11:45:08
Ich würde eine Methode char* Klasse1::getBla() implementieren. Alles andere wäre mir wohl zu unsauber.

Gast
2012-02-01, 12:23:50
Müsste "bla" dann public sein oder ginge auch private?

Baalzamon
2012-02-01, 12:36:53
Müsste "bla" dann public sein oder ginge auch private?
Die sollte dann ruhig private sein. Überhaupt ist es in der OOP gerne gesehen getter und setter für Variablen zu benutzen.


char* Klasse1::getBla()
{
return bla;
}

void Klasse1::setBla(char* bla)
{
this->bla = bla;
}

del_4901
2012-02-01, 14:32:11
Getter und Setter kann man sich schenken wenn die Variable eh nur intern verwendet wird. In C++ nimmt man auch nicht so gern Singeltons und wenn doch dann nur nach Abwaegung. Wenn jede Klasse nur einmal existiert kann man auch eine 'static' member Variable verwenden. Das ganze kann man auch ueber friend definion nach aussen oeffnen.

Mond
2012-02-01, 14:45:41
Rein interessehalber: Warum nimmt man in C++ nicht so gerne Singletons? Und was muss man dabei abwägen? Bin nicht wirklich erfahren, daher die Frage.

Baalzamon
2012-02-01, 14:46:40
Mir scheint du triffst ziemlich viele Annahmen ohne zu wissen was davon wirklich zutrifft. No offense. :)

Wenn die Variable nur intern (was bedeutet das in diesem Zusammenhang für dich) verwendet wird, braucht man keine getter und setter. Meinem Verständnis nach (deswegen die Frage was es für dich bedeutet) wird diese Variable ja gerade nicht nur intern verwendet, da er gerne aus einer anderen Klasse daraus zugreifen möchte.

Und die Klasse als Singleton zu implementieren und dann per friend nach außen zugänglich zu machen finde ich persönlich sehr unschön. Zumal das vielleicht auch gar nicht möglich ist, da wir nicht wissen wieviele Instanzen er erzeugen möchte.

Wie dem auch sei, dass muss der Threadstarter selber wissen.

Baalzamon
2012-02-01, 14:48:59
Rein interessehalber: Warum nimmt man in C++ nicht so gerne Singletons? Und was muss man dabei abwägen? Bin nicht wirklich erfahren, daher die Frage.
Generell sind Singletons in der OOP wegen ihrer vielen Nachteile (http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29#Nachteile) nicht gerne gesehen.

Nighthawk13
2012-02-03, 18:39:55
Ich würde eine class/struct "MySharedData" machen(mit dem String etc) und alle Klassen haben einen boost::shared_ptr darauf, der ihnen im Konstruktor übergeben wird.

Dann ist klar, was gemeinsam verwendet wird und was nur einer Klasse gehört.

Der faule Weg(für eine Instanz je Klasse) wäre als public static variable in ne MySharedData-Basisklasse, wovon alle anderen Klassen erben. Dann spart man sich die Pointer-Dereferenzierung.

Tesseract
2012-02-03, 23:08:49
ich würde erstmal dein klassenkonzept hinterfragen bevor du nach dem "besten hack" suchst. warum teilen sich 3 klassen überhaupt eine variable? ist diese konstant? wenn eine klasse auf die variable einer anderen zugreift macht man das mit einem getter. wenn zwischen den klassen irgendwelche "esoterischen verbindungen" bestehen ist für gewöhnlich was am konzept faul.