Vektoren, Iteratoren, Zeiger, Referenzen - hab mich wohl verheddert



  • Steh immer noch auf dem Schlauch.

    Die erste Adresse würde ich für das Objekt erwarten (dort beginnt es im Speicher), die zweite für die in dem Objekt enthaltene Struktur. In meinem Bsp. hat jedes Objekt der Klasse RectangleC auch noch andere Member.


  • Mod

    Reth schrieb:

    In meinem Bsp. hat jedes Objekt der Klasse RectangleC auch noch andere Member.

    In deinem Beispiel ist nur ein Member. Wenn du dich auf nicht gezeigten Code beziehst, können wir nicht helfen. Üblicherweise werden die Basisklassen- und Membersubobjekte in der Reihenfolge der Deklaration angeordnet.
    Wenn keine Basisklasse vorhanden ist und nicht zuvor virtuelle Funktionen deklariert wurden, hat der erste nichtstatische Member typischerweise (vom Standard garantiert nur im Fall von Standardlayoutklassen) ein Offset von 0 relativ zum umgebenden Klasse, in diesem Fall sind Adressen des Klassenobjektes und des Members wie beobachtet gleich.



  • @Camper:
    Danke! Genau das hatte ich schon vermutet, allerdings auch nach längerem Bemühen von Google noch nix dazu gefunden! Ist das irgendwo beschrieben?

    Ja, das mit den anderen Membern hatte ich leider nicht im Bsp. (habs oben noch ergänzt):

    class RectangleC
    {
        private:
            struct Rectangle rectangle;
            int width, height;
    
        public:
    ...
    


  • struct Rectangle rectangle;
    

    Warum struct?



  • Reth schrieb:

    Genau das hatte ich schon vermutet, allerdings auch nach längerem Bemühen von Google noch nix dazu gefunden! Ist das irgendwo beschrieben?

    Im Zweifelsfall hilft eigentlich immer nur der Standard.

    open-std.org n3690, §9.2 (19) schrieb:

    If a standard-layout class object has any non-static data members, its address is the same as the address of its first non-static data member.

    Allerdings hätte ich das andersherum formuliert.



  • Danke Dir!



  • manni66 schrieb:

    struct Rectangle rectangle;
    

    Warum struct?

    Sorry, hatte ich übersehen. Die Struktur ist Teil des Betriebssystem-APIs, das ich verwende.



  • Reth schrieb:

    manni66 schrieb:

    struct Rectangle rectangle;
    

    Warum struct?

    Sorry, hatte ich übersehen. Die Struktur ist Teil des Betriebssystem-APIs, das ich verwende.

    Auch dann ist das struct in C++ nicht notwendig.



  • man muss das Schlüsselwort nicht mehr angeben, wenn man ein Variable dieses Typs deklariert?



  • Reth schrieb:

    man muss das Schlüsselwort nicht mehr angeben, wenn man ein Variable dieses Typs deklariert?

    In C++: Nein


Anmelden zum Antworten