C++: copy-Konstruktor, =-Operator auf Klassen

  • Wie wird man den =-Operator auf Klassen los? Irgendwie passt dessen Verwendung nicht ganz in das Konzept der OOP. Welchen Sinn macht es denn, wenn ich den Zugriff auf ein Objekt nur über öffentliche Methoden gestatte, es dann aber möglich ist alle Elementvariablen mit
    instanz2 = instanz1
    zu verändern.

    EDIT: Zugegeben, einen so eklatanten Verstoß gegen die Prinzipien der OOP stellt die Verwendung des Operators auch nicht dar. Die Elementvariablen von instanz1 können ja auch nur über die öffentlichen Zugriffsmethoden verändert werden. Daher würden durch instanz2 = instanz1 nur korrekte Werte für die Elementvariablen zugewiesen werden. Meine Frage bleibt aber trotzdem.
    Selbe Überlegungen gelten auch für den copy-Konstruktor

    "in 1000 years, we will be living machines, or dead gods"

  • Zitat von subatomic

    Wie wird man den =-Operator auf Klassen los? Irgendwie passt dessen Verwendung nicht ganz in das Konzept der OOP. Welchen Sinn macht es denn, wenn ich den Zugriff auf ein Objekt nur über öffentliche Methoden gestatte, es dann aber möglich ist alle Elementvariablen mit
    instanz2 = instanz1
    zu verändern.



    Normalerweise wird das so gelöst, dass operator=() private deklariert wird.

    Eins Zwei Gras Bär Hund Vier Muh Macht Die Kuh

  • thx!

    Eine Frage hätte ich jetzt noch:
    Wenn man auf einem dynamisch erzeugten Array delete aufruft, dann sollen angeblich die Destruktoren für jedes Arrayelement mit aufgerufen werden. Sollte das auch für Arrays aus Zeigern auf Objekte gelten?
    Wenn ich das Array mit
    Klassenname **arrayname = new Klassenname *[length]
    erzeuge und mit
    delete[] (arrayname)
    lösche, dann werden die Destruktoren NICHT aufgerufen!
    Bedeutet das, auf jedes Arrayelement muß delete einzeln aufgerufen werden?

    "in 1000 years, we will be living machines, or dead gods"

  • ganz genau!

    Viele Menschen sind zu gut erzogen, um mit vollem Mund zu sprechen,
    aber sie haben keine Scheu, es mit leerem Kopf zu tun.
    (Orson Welles)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!