PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable in C++ für alle Classen (in verschiedenen Dateien) zugänglich machen


blax
2003-09-15, 21:26:22
Ich würde gerne eine Variable für alle Klassen, die nicht unbedingt in der selben datei liegen, so PUBLIC (oder so) deklarieren,->dass ich auch von überall darauf zugreifen kann

ya hav the information?

Exxtreme
2003-09-15, 21:31:26
Vielleicht hilft dir das Schlüsselwort "extern".

Wobei ich mir sicher bin, daß es eine elegantere Lösung für dein Problem gibt. :)

blax
2003-09-15, 21:32:40
da hast du recht...ist nicht sehr elegant.
is auch nur um etwas auszuprobiern

danke jedenfalls

zeckensack
2003-09-15, 21:35:33
Ack @ Exxtreme. Um's mal auszuführen, in alle Module includen (vielleicht in einen gemeinsamen Header oder so):extern int hurray;
Und dann in ein Modul:int hurray=0;
Dann ist die Variable allen Modulen bekannt, aber nur einmal definiert.

blax
2003-09-15, 21:39:54
zwei weitere Frage:
in java gibt es die möglich ein attribut einer klasse "static" zu setzen...aber, wie ich herausgefunden habe, kann ich nicht die selbe syntax verwenden:
static int x=0;


noch eine:
in java gibt es die möglichkeit über den operator "this" auf ein objekte der aktuellen klasse zugreifen zu können......
da ich mir schon ziemlich sicher bin, dass C++ sowas ähnliches vertritt frage ich: WIE?

Exxtreme
2003-09-15, 21:41:12
Original geschrieben von blax
da hast du recht...ist nicht sehr elegant.
is auch nur um etwas auszuprobiern

danke jedenfalls
Ob du es glaubst oder nicht. Das rTool besteht jetzt aus ca. 2200 Zeilen Code. Ich habe nicht eine einzige, selbstdefinierte, globale Variable im Einsatz. :)

Exxtreme
2003-09-15, 21:48:00
Original geschrieben von blax
zwei weitere Frage:
in java gibt es die möglich ein attribut einer klasse "static" zu setzen...aber, wie ich herausgefunden habe, kann ich nicht die selbe syntax verwenden:
static int x=0;
"static" gibt es auch in C(++), hat wohl aber eine etwas andere Bedeutung.
Original geschrieben von blax
noch eine:
in java gibt es die möglichkeit über den operator "this" auf ein objekte der aktuellen klasse zugreifen zu können......
da ich mir schon ziemlich sicher bin, dass C++ sowas ähnliches vertritt frage ich: WIE?
Den "this"-Operator gibt es auch in C++. :)

mal aus der Borland C++-Builder-Hilfe:

"Kategorie

C++-spezifische Schlüsselwörter

Syntax

class X {
int a;
public:
X (int b) {this -> a = b;}
};

Beschreibung

In nicht-statischen Elementfunktionen steht das Schlüsselwort this für einen Zeiger auf das Objekt, für das die Funktion aufgerufen wurde. Bei allen Aufrufen von nicht-statischen Elementfunktionen wird this als "verborgenes" Argument übergeben.

Das Schlüsselwort this repräsentiert eine lokale Variable, auf die im Körper jeder statischen Elementfunktion zugegriffen werden kann. Diese Variable wird innerhalb der Funktion implizit für Zugriffe auf Elemente benutzt. Sie muß nicht deklariert werden und wird in Funktionsdefinitionen nur selten explizit angegeben.

Beispiel: Im Aufruf x.funk(y), wobei y ein Element von X ist, erhält this den Wert &x, und y wird zu this->y, was gleichwertig mit x.y ist.

Statische Elementfunktionen haben keinen this-Zeiger, weil sie nicht im Hinblick auf ein bestimmtes Objekt aufgerufen werden. Eine statische Elementfunktion kann deshalb nicht auf nicht-statische Elemente zugreifen, ohne ein Objekt explizit mit . oder -> zu spezifizieren."

zeckensack
2003-09-15, 22:33:14
Original geschrieben von blax
zwei weitere Frage:
in java gibt es die möglich ein attribut einer klasse "static" zu setzen...aber, wie ich herausgefunden habe, kann ich nicht die selbe syntax verwenden:
static int x=0;
static members werden in C++ in der Klassendeklaration nur ... deklariert :)
Das ist so ein ähnliches Konstrukt wie das extern oben.

Im Header, der die Klasse deklariert schreibst du sowasclass
Milchshake
{
<...>
static int strohhalme;
};
Das für sich alleine produziert dann erstmal einen Linker-Error, weil strohhalme nirgendwo definiert wurde. Hast du sicher schon bemerkt :)
Den löst man auf, indem man in einem Modul (am besten das cpp, das die Klassenfunktionen definiert) folgendes schreibtint Milchshake::strohhalme; //optional direkt hier initialisierbar