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.