Zeiger in Klassen - public



  • Hi zusammen,

    ich bin grad ein wenig am rumwursteln mit Zeiger und Klassen und hab jetzt folgendes Beispiel:

    #include <iostream.h>
    #include <conio.h>

    class qm
    {
    float laenge, breite, ergebnis;
    void calc ();
    void calc2 ();
    public:
    float *pHoehe;
    qm(float l, float b, float h);
    void get ();
    };

    qm::qm(float lae=0, float bre=0, float hoe=0)
    {
    laenge=lae;
    breite=bre;
    pHoehe= new float(hoe);
    ergebnis=0;
    }

    void qm::calc ()
    {
    ergebnis=laenge*breite;
    }

    void qm::calc2 ()
    {
    ergebnis=*pHoehe*laenge*breite;
    }

    void qm::get ()
    {
    qm::calc();
    cout << endl << "l " <<laenge << endl;
    cout << endl << "b "<<breite << endl;
    cout << endl << "e "<<ergebnis << endl;
    qm::calc2();
    cout << endl << "h " <<*pHoehe <<endl;
    cout << endl << "l " <<laenge << endl;
    cout << endl << "b "<<breite << endl;
    cout << endl << "e "<<ergebnis << endl;

    }

    int main ()
    {

    qm test(10,10,10);
    test.get();
    cout << "ttt " << test.(*pHoehe);

    getch();
    }

    Was nun nicht klappt ist die Zeile
    cout << "ttt " << test.(*pHoehe);
    aber ich verstehe nicht warum.
    Denn
    cout << "ttt " << test.pHoehe;
    gibt mir die Adresse von dem Zeiger aus, aber warum klappt das
    dereferenzieren ( oder wie man dsa auch immer nennt/schreibt 🤡) nicht ?!?

    Vielen Dank für euren Rat.
    Gruß
    alligator



  • cout<< *(test.pHoehe);

    Aber die Klammern können wegbleiben, also

    cout<< *test.pHoehe;



  • Und wie wär's mit:

    cout << test->pHoehe;
    

    ???
    Noch ein kleiner Tipp:
    Es ist kein guter Stil, Datenelemente einer Klasse als public zu deklarieren.
    Besser, du machst sie private und greifst dann mit einer public-Funktion auf sie zu.



  • Original erstellt von cerebrum:
    **Und wie wär's mit:

    cout << test->pHoehe;
    

    ???
    Noch ein kleiner Tipp:
    Es ist kein guter Stil, Datenelemente einer Klasse als public zu deklarieren.
    Besser, du machst sie private und greifst dann mit einer public-Funktion auf sie zu.**

    Den -> Operator würde man benutzen wenn 'test' selber ein Zeiger währe.
    Da müsste man sonst nämlich schreiben (*test).bla.



  • Ups, sorry, mein Fehler 🙄


Anmelden zum Antworten