enum in Klassen



  • Hallo zusammen.
    Ich hab ein Problem bei der Parameterübergabe von enum Konstanten in Klassen
    und zwar finde ich die untere Syntax so merkwürdig. "Mitarbeiter::VERHEIRATET".
    Normalerweiße ist doch eine solche Syntax für static Elemente vorgesehen...

    Warum wird sie hier auch für enum Konstanten verwendet?
    Bin mir sicher das mir das einer sagen kann.

    #include<iostream>
    using namespace std;
    
    class Mitarbeiter
    {
    public:
    	enum FAM_STD (LEDIG, VERHEIRATET);
    
    private:
    	int Alter;
    	int Gehalt;
    	FAM_STD Familienstand;
    
    public:
    	Mitarbeiter(int pAlter, int pGehalt, FAM_STD pFam);
    
    	//Methoden
    	//.....
    };
    
    Mitarbeiter::Mitarbeiter(int pAlter, int pGehalt, FAM_STD pFam)
    {
    	Alter=pAlter;
    	Gehalt=pGehalt;
    	Familienstand=pFam;
    }
    
    int main()
    {
    	class Mitarbeiter Dennis(27,3000,Mitarbeiter::VERHEIRATET);//Warum Mitarbeiter::VERHEIRATET??
    	//.......
    	//.......
    }
    


  • enum erstellt auch nur konstanten - nur eben konstanten die zusammen gehoeren.

    du koenntest genauso gut
    static int const VERHEIRATET=1;
    static int const LEDIG=2;
    schreiben - das ware nahezu identisch.

    der einzige (hier relevante) unterschied zu enum ist, dass du als typ
    FM_STD angeben kannst und dir somit sicher sein kannst, dass nur LEDIG und VERHEIRATET uebergeben werden kann.

    aber prinzipiell erstellt man mit enum auch nur konstanten.



  • Wenn ein enum nicht in einer Klasse steht, sind die definierten Elemente global verfügbar.
    Deswegen geht folgendes z.B. nicht:

    enum a { VERHEIRATET };
    enum b { VERHEIRATET };
    

    VERHEIRATET wird im selben Scope 2 Mal deklariert.

    Wenn das enum in einer Klasse steht, sind die Elemente nicht mehr im globalen Scope, sondern nur noch innerhalb der Klasse. Deswegen kann man VERHEIRATET nicht mehr direkt ansprechen - der Compiler würde den Identifier nicht finden -, sondern man muss in den Scope der Klasse schalten.
    Das macht man, indem man den Klassennamen und danach den Scope-Operator :: hinschreibt.

    btw:
    In einer Methode der Klasse ist das natürlich überflüssig. 🙂
    In main wird es aber gebraucht.



  • Könntest du mir ein kleines Beispiel für eine solche Anwendung in einer main()
    geben??



  • Guanin schrieb:

    int main() 
    { 
        class Mitarbeiter Dennis(27,3000,Mitarbeiter::VERHEIRATET);//Warum Mitarbeiter::VERHEIRATET?? 
        //....... 
        //....... 
    }
    

    🤡

    Du brauchst den Scope-Operator in jeder Funktion, die keine Methode der Klasse ist. main war nur ein Beispiel.



  • [quote="Guanin"]Hallo zusammen.
    Ich hab ein Problem bei der Parameterübergabe von enum Konstanten in Klassen
    und zwar finde ich die untere Syntax so merkwürdig. "Mitarbeiter::VERHEIRATET".
    Normalerweiße ist doch eine solche Syntax für static Elemente vorgesehen...
    [quote]

    Mach dir keine Gedanken. Der ::-Bereichsauflösungsoperator ist nicht ausschließlich für static-Elemente vorgesehen, sondern wird vielfältig benutzt. Beispiele:

    -Auf Elemente in einem definierten namespace zugreifen
    -Methoden (Klassenfunktionen) außerhalb der Klassendefinition definieren
    -eben die static Elemente

    ...etc...

    Eben immer dann wenn man dem Compiler mitteilen muss/will, in welchem "Bereich" ein jeweiliges Element deklariert/definiert ist. Die Syntax ist damit keinesfalls merkwürdig.


Anmelden zum Antworten