Zeig' mal ein nicht mit Deinen Begriffen verstümmeltes Beispiel.
Es ist nicht zu erkennen, wo Deine Begriffe anfangen und aufhören.
Wenn Du aus "Geheimhaltungsgründen" oder allgemeiner Paranoia nicht die
Bezeichner des Originals verwenden willst, ersetze halt den Klassennamen
durch Horst, den Objektnamen durch Ewald, Funktionsnamen durch Detlef
und --sofern "Wenn Zustand X von return" ein Name eines Elements der
Klasse sein sollte-- den Namen durch Manfred.
Ich nehme an, daß genau das gemeint ist:
1 | if (Ewald.Detlef() == Horst::Manfred)
|
2 | {
|
3 | }
|
dann gibt es zwei Möglichkeiten, was Manfred sein kann:
Variante A:
1 | class Horst
|
2 | {
|
3 | ... etc.pp.
|
4 |
|
5 | static int Manfred;
|
6 |
|
7 | ... etc.pp.
|
8 | }
|
Manfred ist eine statische Membervariable. Alle Instanziierungen von
Horst teilen sich diese Variable, auf die kann sowohl über den
Klassennamen als auch über den Instanzennamen zugegriffen werden:
1 | Horst Ewald;
|
2 |
|
3 | cout<<"Hallo " << Horst::Manfred;
|
4 | cout<<"Hallo " << Ewald.Manfred;
|
Bei der Objektinstanz muss der Punkt-Operator verwendet werden.
Fall B:
1 | class Horst
|
2 | {
|
3 | ... etc.pp.
|
4 |
|
5 | enum
|
6 | {
|
7 | Manfred,
|
8 | Elmar,
|
9 | Ronnie,
|
10 | Rolf
|
11 | };
|
12 |
|
13 | ... etc.pp.
|
14 | }
|
In diesem Fall ist Horst::Manfred eine Namensraumauflösung. Das enum
gilt nur innerhalb der Klassendefiniton, bei Zugriffen von außerhalb der
Klasse muss der Klassenname zur Verdeutlichung angegeben werden.
So etwas wird oft verwendet, um irgendwelchen Rückgabewerte einer
Memberfunktion sprechende Werte zuweisen zu können, ohne daß es zu
Namenskonflikten mit anderen Klassen kommt.
Eine andere Klasse namens Thorben könnte nämlich auch so ein enum
enthalten, bei der die Reihenfolge und also die numerischen Werte der
Elemente anders ist.
Anders als in C, wo es keine Möglichkeit gibt, zwei derartige Enums in
der gleichen Übersetzungseinheit zu verwenden, kann in C++ durch die
Namensraumangabe (hier: Klassenname) so etwas gemacht werden.