Muss ein Objekt immer etwas "wiegen"?



  • Nabend,

    wir haben uns letztens im Unterricht alle ziemlich gewundert.
    Besonders unser Dozent.

    Wir haben ein Objekt aus einer Klasse instanziert, die keine Attribute hatte.
    Als wir uns mit sizeof() die Grösse des Objekts im Speicher wiedergeben liessen,
    gab MS Visual Studio 6.0 eine : " 1(eins) " zurück.

    Hat jemand eine Erklärung dafür?
    Mein Dozent ist in dieser Hinsicht für jede Antwort dankbar.
    Er hatte es auch mit dem Borland Compiler ausprobiert, mit dem selben Ergebnis.

    greetz
    SLi



  • Nur so ne Idee,
    wenn ein Objekt Nullgrösse hätte könnte es zu Problemen kommen.
    Ich denke dass dieses eine Byte dafür da ist auch leeren Objekten eine Identität zu geben.

    z.B.

    class test{};
    class test2{ public:test arr[2];};
    
    int main()
    {
    	test2 mytest;
    
    	cout<< &mytest.arr[1]<<endl;
    
    	return 0;
    }
    

    test2 hat ja ein Array als Attribut,auch wenn dessen Objekte leer sind.Wenn ich jetzt die Adresse davon ausgeben möchte könnte es ja Probleme geben wenn das leere Objekt letztendlich keinen Speicher belegt.

    MfG Spacelord



  • Spacelord hat es ganz gut getroffen: jedes Objekt muss eine Identität haben und dafür hat es eben dieses symbolische byte, damit es eine Adresse besitzt.



  • Eine Ausahme davon sind leere Basisklassenobjekte, die nicht unbedingt eine von Null verschiedene Größe haben müssen.



  • Aha, ich verstehe.

    Vielen Dank für die Antworten.
    Das hat mir einen "Bonuspunkt" gebracht,
    mein Dozent ist zufrieden gestellt und wollte den Link zu
    diesem Forum haben 🙂

    thx nochmal
    greetz
    SLi



  • Auch wenn ein Dozent nicht alles Wissen kann sollte er sowas eigentlich Wissen.
    Wenn Ihr dieses Experiment nicht gemacht hättet wüsstet Ihr das jetzt nicht. So pflanzt sich diese Lücke in der Schülergeneration fort.



  • Warum braucht er das mit der (Groesse!=0) zu wissen? Wozu brauchen es die Schüler?



  • Objekte (in der OOP) sind bekanntlich durch 3 Eigenschaften charakterisiert: Zustand, Verhalten, Identität. Das sollte ein Dozent wissen, wenn er OOP unterrichtet.

    Der Zustand wird durch die Werte der Membervariablen bestimmt, das Verhalten durch die definierten Memberfunktionen, und die Identität (in C++) durch die Adresse im Speicher. Das sollte er auch wissen, wenn er C++ unterrichtet.

    Daraus folgt, dass zwei verschiedene Objekte nicht an der gleichen Adresse liegen können, da sie sonst identisch wären. Das sollte er sich ableiten können. Von da an ist es nur noch ein kleiner Gedankensprung bis zur Erkenntnis, dass kein Objekt die Größe 0 haben kann.



  • Ruhig Blut...

    Wie oben erwähnt, man kann nicht alles wissen.
    Ich halte viel von meinem Dozenten.
    Neben der Berufserfahrung bei Siemens/Nixdorf und anderen Grossfirmen, konnte er mir, immer sehr kompetent und verständlich Antworten liefern.
    Er ist von dort in den "Dozentenjob" abgeworben worden und unterrichtet jetzt schon ca. 15 Jahre am BiB.

    Ich gehen sogar soweit, ihn als workaholic zu bezeichnen.
    (Das schliesse ich aus den Korrekturemails die meist gegen 3h Nachts kommen, wenn um 8h wieder Unterericht ist.)

    Er hat sich selbst auch um die Lösung dieser Frage gekümmert und ist auf den selben Schluss gekommen, den ich ihm aus diesem Forum hervorbringen konnte.
    Meine Beiträge haben ihn also quasi nur bestätigt.

    Aber trotzdem:
    Noch immer weiß er nicht, woher das kommt, das genau 1 Byte "Gewicht" herauskommen. Ist das eine Konvention? Woher stammt das? Warum genau EIN Byte?
    Die niedrigstwertige Datentyp.

    Er bat mich, nochmal euch zu fragen, ob ihr das wisst.

    Hätten wir dieses Experiment nicht ausgeführt, so hätte uns das auch nicht wehgetan, denke ich.
    Es kam auch nur Zustande, weil unser Dozent uns erklärt hat, wie das mit statischen Variablen ist und wo die abgelegt werden. das diese eben nicht in das Gewicht der Klasse/Objekt fallen. Da unser erstelltes Objekt aber NUR eine statische Variable hatte und trotzdem eine 1 rauskam, war er ein bisschen irritiert.

    Denkt was ihr wollt.
    Ich finde es nur menschlich und noch menschlicher, dass er sofort zugab, dass ihn das verwundert und das er dies nochmal nachforschen wollte.

    greetz
    SLi



  • Hallo sliwalker,

    bei welchen BIB bis du den????

    MFG TaccoGo



  • sliwalker schrieb:

    Aber trotzdem:
    Noch immer weiß er nicht, woher das kommt, das genau 1 Byte "Gewicht" herauskommen. Ist das eine Konvention? Woher stammt das? Warum genau EIN Byte?
    Die niedrigstwertige Datentyp.

    Mal dagegen gefragt: Wieviel sonst, vielleicht 200? Rein theoretisch ist das völlig egal; aber wenn man schon keine Nutzlast hat, sollte man eigentlich versuchen, möglichst wenig Platz zu verschwenden.

    Ich finde es nur menschlich und noch menschlicher, dass er sofort zugab, dass ihn das verwundert und das er dies nochmal nachforschen wollte.

    👍



  • Ich bin im BiB Paderborn.

    Fachrichtung: Anwendungsentwicklung

    greetz
    SLi



  • oh im hauptsitz.

    ich habe im bib Görliz studirt (staatlich geprüfter Assistent für Softwaretechnologie) und habe einen kolegen hier der im bib Dresten studirt hat.

    MFG TaccoGo


Anmelden zum Antworten