Verstehe den Ausdruck nicht



  • ich hoffe wirklich so sehr dass mir jemand detailliert erklären kann was der folgende Ausdruck bedeutet, denn mitlerweile verzweifle ich -.-

    class Karte

    {

    private:

    static char *FARBE[];

    int typ;

    public:

    enum KFarbe {Karo=0,Herz,Pik,Kreuz};

    KFarbe Farbe(void) {return ((KFarbe)(typ/8));}

    static const char *FarbeN(KFarbe f) {return(FARBE[f]);}

    };

    char *Karte::FARBE[]={"Karo","Herz","Pik","Kreuz"};

    und zwar verstehe ich genau nicht, weshalb man bei der Methode FarbeN vornedran das * hinmacht 😞

    und weshalb man bei der definition von FARBE das * vor Karte hinmacht und nicht vor FARBE[] selbst

    bitte helft mir



  • Es macht keinen Unterschied ob das * direkt nach dem Datentypen oder direkt vor dem Variablen/Methodennamen steht:

    // beides das selbe
    const char* a = "a";
    const char *a = "a";
    
    // Rückgabewert bei beiden Zeiger auf eine konstante Zeichenkette
    // hier auch beides gleich
    const char* Methode();
    const char *Methode();
    


  • 1. Weil die Methode nicht direkt einen Wert, sondern einen Pointer/Zeiger auf einen Wert zurückgibt. Du solltest dir dringend ein gutes Tutorial 'reinziehen, in dem solche Basics vermittelt werden. Du wirst verstehen, dass kaum jemand Lust hat, dir komplett das Programmieren beizubringen (nicht böse gemeint 🙂 ).

    2. Weil sich "das " auf den Rückgabewert (char) bezieht, und nicht auf den Methodennamen.

    EDIT:

    @Airdamm:

    Ich glaube, sie meinte, warum es "char *Karte::FARBE[]" heißt und nicht "char Karte::*FARBE[]". Habe ich zumindest so aus der Formulierung herausgelesen...



  • @Airman: das ist mir schon klar, aber das war nicht meine frage, ok ich versuch es genauer,

    weshalb ist bei der methode FarbeN überhaupt das * vornedran, was hat es da zu suchen? welche wirkung macht das * ?
    ich kenne nur normale methoden, ist das eine art Zeigermethode?

    und warum wurde bei der definition vom Zeiger *FARBE[] das * verschoben und vor Klasse hingesetzt?



  • ladyamen schrieb:

    ich hoffe wirklich so sehr dass mir jemand detailliert erklären kann was der folgende Ausdruck bedeutet, denn mitlerweile verzweifle ich -.-

    Bitte in Zukunft die C/C++ Tags für Code verwenden. Zudem sieht man hier mal wieder, wie zuviele "Whitespaces" auf der Einen, zu wenig auf der Anderen, die Lesbarkeit erschweren. Zudem fehlt hier auch definitiv Code...

    class Karte
    {
        private:
            static char *FARBE[];
            int typ;
    
        public:
            enum KFarbe {Karo=0,Herz,Pik,Kreuz};
    
            KFarbe Farbe() // (void) ist in C++ unüblich
            {
               return (KFarbe)(typ/8); // ?WTF? Man kann es auch noch schlechter Lesbar machen
            }
    
            static const char *FarbeN(KFarbe f)
            {
                return FARBE[f];
            }
    };
    
    char *Karte::FARBE[]={"Karo","Herz","Pik","Kreuz"};
    

    ladyamen schrieb:

    und zwar verstehe ich genau nicht, weshalb man bei der Methode FarbeN vornedran das * hinmacht 😞

    Weil ein Zeiger zurückgegeben wird (Thema: C-String, char-Array...).

    ladyamen schrieb:

    und weshalb man bei der definition von FARBE das * vor Karte hinmacht und nicht vor FARBE[] selbst

    Weil FARBE ein Bestandteil der Karte ist und daher zusammengehört. Zudem ist dies ein Array von char-Zeigern.

    Grundsätlich wäre es ohnehin mit std::string lesbarer, und für dich wohl auch verständlicher... (Ganz davon abgesehen das ich den Code eh eher schlecht von der Schreibweise finde).

    #include <string>
    
    class Karte
    {
        private:
            static std::string FARBE[];
            //...
    
        public:
            //...
            static std::string FarbeN(KFarbe f)
            {
                return FARBE[f];
            }
    };
    
    std::string Karte::FARBE[] = {"Karo","Herz","Pik","Kreuz"};
    

    cu André



  • @asc: danke für den C/C++ Tag tipp, bin neu, werde es ab jetzt benutzten ^^
    und zu der Lesbarkeit, ja heul, ich leide ja gerade so sehr, weil der Code nicht von mir ist und ich verzweifelt versuche den zu verstehen -.-

    also gibt man als rückgabewert bei der Methode FarbeN einen Zeiger zurück und nicht die adresse die im Inhalt des Zeigers gespeichert ist?



  • ladyamen schrieb:

    @asc: danke für den C/C++ Tag tipp, bin neu, werde es ab jetzt benutzten ^^
    und zu der Lesbarkeit, ja heul, ich leide ja gerade so sehr, weil der Code nicht von mir ist und ich verzweifelt versuche den zu verstehen -.-

    also gibt man als rückgabewert bei der Methode FarbeN einen Zeiger zurück und nicht die adresse die im Inhalt des Zeigers gespeichert ist?

    Ja, man gibt den Zeiger zurück, der auf den Wert zeigt, nicht den Wert selbst.

    Tipp: Schreib lieber eigene, kleine Ubüngs-Progrämmchen. Da lernt man mehr! Und dann fällt das Verstehen auch nicht so schwer.



  • dankeschön ich habs jetzt verstanden 😃
    *verbeug*


Anmelden zum Antworten