Umgang mit Referenzen als Member



  • Hallo nochmals,

    ich habe mal eine Frage, wie man in C++ mit so etwas umgeht:

    Wenn ich eine Membervariable einer Klasse als Referenz anlege, muss ich sie ja initialisieren (im Konstruktor oder sonstwo).
    Wenn ich aber im Konstruktor noch keinen sinnvollen Wert angeben kann oder will, sondern eine Setter-Methode anbieten will, wie macht man das dann am besten?

    Ein Dummy-Objekt im Konstruktor anlegen und zuweisen?
    Oder ganz was anderes?

    Irgendwie würde ich in C++ gern mehr Referenzen verwenden, aber das gelingt oft nicht, da sie die Anforderungen nicht erfüllen und ich deshalb immer Zeiger nehmen muss!

    Danke schon mal!
    Ciao



  • Wenn du kein sinnvolles Objekt zum referenzieren hast, dann solltest du auch keine Referenz als Member benutzen. Refs als Members sollen ja verdeutlichen: da ist garantiert ein Objekt auf das referenziert wird. Das hat was mit Aggregation zu tun! Refs als Member nur deshalb zu benutzen, um sie zu benutzen, macht keinen Sinn.

    Vielleicht hilft dir das hier etwas:
    http://de.blog.360.yahoo.com/blog-lpz8ry8wdq9.tWE_8IgP.NtXjk0-?cq=1&bid=47&yy=2006&mm=5



  • Wenn ich eine Membervariable einer Klasse als Referenz anlege, muss ich sie ja
    initialisieren (im Konstruktor oder sonstwo). 
    Wenn ich aber im Konstruktor noch keinen sinnvollen Wert angeben kann oder
    will, sondern eine Setter-Methode anbieten will, wie macht man das dann am besten?
    

    Garnicht. Es geht schlicht und einfach nicht! Referenzen müssen im Konstruktor durch eine Initialisierungsliste initialisiert werden. Referenzen können auch keinen wert annehmen der sagt das die Referenz ein Alias auf "nichts" ist, so wie es bei nullzeigern der fall ist.

    Um Assoziationen zu erzeugen würde ich Pointer verwenden. Vorteil: Keine Initialisierung im Konstruktor notwendig.

    Referenzen verwende ich hauptsächlich zur übergabe von Werten um unnötiges kopieren zu vermeiden ( => Call by Reference ).



  • Danke schön!

    Wenn ichs recht in Erinnerung habe, dann kann man einer Referenz (nicht Zeiger) auch keinen neuen Wert zuweisen, richtig?


Log in to reply