[C++ vs. Java] Werte



  • Ein Wert in Java ist entweder
    -> ein Element eines des Basisdatentypen
    -> eine Objektreferenz
    -> die spezielle Referenz null, die auf kein Objekt verweist.

    Jetzt mein Versuch 😉 :
    Ein Wert in C++ ist entweder
    ->Ein Element eines der Basisdatentypen
    ->Ein Element eines Objekts
    ->Eine ElementReferenz(Referenz auf ein Element eines der Basisdatentypen)
    ->Eine ObjektReferenz
    ->Ein Zeiger
    ->Der NULL-Zeiger

    Richtig? Was vergessen?



  • Raptor schrieb:

    Ein Wert in C++ ist entweder
    ->Ein Element eines der Basisdatentypen
    ->Ein Element eines Objekts
    ->Eine ElementReferenz(Referenz auf ein Element eines der Basisdatentypen)
    ->Eine ObjektReferenz
    ->Ein Zeiger
    ->Der NULL-Zeiger

    Viel zu kompliziert (und inkonsequent -- wo sind Referenzen auf Zeiger?). Ein Wert in C++ ist entweder eine Instanz eines Typen oder eine Referenz auf eine solche Instanz (wobei ich mir nicht sicher bin, ob Referenzen überhaupt Werte in dem Sinne sind). Eine Trennung zwischen Basistypen, Klassentypen und Zeigern ergibt keinen Sinn.



  • Bashar schrieb:

    Ein Wert in C++ ist entweder eine Instanz eines Typen [...] Eine Trennung zwischen Basistypen, Klassentypen und Zeigern ergibt keinen Sinn.

    Den "Wert" definiert man ja gerade als eine Art Gegenstück zum "Objekt". Etwas, was ein Objekt von einem Wert unterscheidet ist zum Beispiel, dass es einen Zustand haben kann, der sich ändern kann. Ein Wert hat keinen Zustand. Es kommt also auch auf die Trennung an.



  • Gregor@Home schrieb:

    Den "Wert" definiert man ja gerade als eine Art Gegenstück zum "Objekt".

    Nicht in C++.

    Etwas, was ein Objekt von einem Wert unterscheidet ist zum Beispiel, dass es einen Zustand haben kann, der sich ändern kann. Ein Wert hat keinen Zustand. Es kommt also auch auf die Trennung an.

    Das wäre dann in C++ wohl eher value type und äh, keine ahnung, 'objekt'?
    aber in c++ trennt man da nicht. Es ist total unerheblich ob etwas ein 'Objekt' oder ein builtin ist.

    Deshalb hat man ja wert-semantik. es ist natürlich schade, dass es dennoch eine kleine trennung zwischen builtin und udt gibt, aber sie ist in C++ sehr gering und fällt im prinzip nur beim erben auf 😉



  • Shade Of Mine schrieb:

    Nicht in C++.

    Diese Definition kommt nicht von Java oder einer anderen Programmiersprache, sondern ganz allgemein aus der "Objektorientierung". Das hat auch nichts mit "Value Type" und "Reference Type" zu tun. Auch ein "Value Type" kann ein Objekt sein.



  • Ich bin ehrlich gesagt aber auch geneigt zu sagen, dass "Objekt" und "Wert" nicht irgendwie abgetrennt sind, sondern, dass ein Objekt (und man könnte auch eine Instanz von int als Objekt betrachten) einen Wert hat.
    Ich denke also weder, dass man irgendwie ne Abgrenzung hat, noch denke ich, dass man in C++ eine besonders geringe Abgrenzung hat. Ein "Wert" ist IMHO eine Eigenschaft eines Objekts. Ein Pointer ist in C++ ein Objekt und hat einen Wert (die Adresse, worauf er zeigt).



  • Gregor@Home schrieb:

    Bashar schrieb:

    Ein Wert in C++ ist entweder eine Instanz eines Typen [...] Eine Trennung zwischen Basistypen, Klassentypen und Zeigern ergibt keinen Sinn.

    Den "Wert" definiert man ja gerade als eine Art Gegenstück zum "Objekt".

    Mag sein, das hat aber nichts mit dem zu tun, was ich geschrieben habe.



  • Gregor@Home schrieb:

    Den "Wert" definiert man ja gerade als eine Art Gegenstück zum "Objekt". Etwas, was ein Objekt von einem Wert unterscheidet ist zum Beispiel, dass es einen Zustand haben kann, der sich ändern kann. Ein Wert hat keinen Zustand.

    Wie Bashar schon sagte, das ist für C++ Verhältnisse zu kompliziert gedacht, vielleicht sogar wenig sinnvoll. Was ist denn für dich der Unterschied zwischen Wert und Zustand?



  • stimmt in c++ fällt die unterschied fast gar nicht auf, vor allem nicht, wenn du operatoren für dein objekt definierst hast.



  • Der Unterschied zwischen was und was ?



  • Gregor@Home schrieb:

    Diese Definition kommt nicht von Java oder einer anderen Programmiersprache, sondern ganz allgemein aus der "Objektorientierung". Das hat auch nichts mit "Value Type" und "Reference Type" zu tun. Auch ein "Value Type" kann ein Objekt sein.

    Wie würdest du dann den Unterschied
    MyInteger und int definieren?

    MyInteger verhält sich wie ein int und wenn ich ein typedef mache:
    typedef ??? was_ist_es;
    wirst du es nicht schaffen den unterschied zwischen einem MyInteger und einem int Objekt zu finden.

    Ist es jetzt ein Objekt oder ein Wert?
    Objektorientierung ist ein dehnbarer begriff. das merkst du zB daran, dass viele Leute Klassen für ein essentielles Instrument der Objektorientierung halten. Da gibt es in der Community schon starke unterschiede was Objektorientierung eigentlich ist. Ich denke daher, dass so eine Definition nicht allgemeingültig sein kann.



  • Optimizer schrieb:

    Der Unterschied zwischen was und was ?

    wie Shade schon geschrieben hat, den unterschied zwischen einem basis-type und einer objekt-referenz



  • Hat nur nichts mit Objekt <-> Wert zu tun (Topic). Dass man in C++ eigene Typen sehr stark an eingebaute Typen angleichen kann, ist mir bekannt.


Anmelden zum Antworten